• LINQ查询表达式---------from子句


    LINQ查询表达式---------from子句

    LINQ的查询由3基本部分组成:获取数据源,创建查询,执行查询

    //1、获取数据源
    List<int> scores = new List<int> { 97, 92, 80, 81, 79, 54 };
    
    //创建查询
    var scoreeQuery =
        from score in scores
        where score > 80
        select score;
    
    //3、执行查询
    foreach (int i in scoreeQuery)
    {
        Console.WriteLine("{0}", i);
    }

    1.1 单个from子句

    string[] values = { "张三", "李四", "王五", "大王", "小王" };
    //查询所有包含“王”字的字符串
    var valuesQuery = from v in values
                      where v.IndexOf("") > -1
                      select v;
    foreach (string s in valuesQuery)
    {
        Console.WriteLine(s);
    }
    输出结果:
        王五
        大王
        小王
    
    在这个LINQ表达式的from子句中,v叫做范围变量,values是数据源。v的作用域存在于当前的LINQ表达式,表达式以外不能访问这个变量。where用来筛选元素,select用于输出元素

     

    1.2 复合from子句

    public void ExpDemo()
    {
        List<PerInfo> listPer = new List<PerInfo>
        {
            new PerInfo{
                Name = "小白",
                Age = 19,
                Tel = new List<string>{"1535010****", "153****8523"}
            },
            new PerInfo{
                Name = "小新",
                Age = 21,
                Tel = new List<string>{"1330708****", "1330709****"}
            },
            new PerInfo{
                Name = "小军",
                Age = 23,
                Tel = new List<string>{"1380524****", "1380525****"}
            }
        };
    
        var query = from PerInfo p in listPer
                    from listTel in p.Tel
                    where listTel.IndexOf("1535010****") > -1
                    select p;
    
        foreach (var q in query)
        {
            Console.WriteLine("姓名:{0};年龄:{1}", q.Name, q.Age);
            foreach (var tel in q.Tel)
            {
                Console.WriteLine("电话:{0}", tel);
            }
        }
    }
    
    public class PerInfo
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
        public List<string> Tel
        {
            get;
            set;
        }
    }
    输出结果:
    姓名:小白;年龄:19
    电话:1535010****
    电话:153****8523 
    在查询数据源中,属性是一个集合时,可以使用复合from子句对这个属性集合查询。比如,一个人,可能有多个手机号。

     

    1.3 多个from子句连接 

    static void Main(string[] args)
    {
        //1.3 使用多个from子句执行联结
        List<PerInfo> listPer1 = new List<PerInfo>
        {
            new PerInfo{
                Name = "小白",
                Age = 19,
                Tel = new List<string>{"1535010****"}
            },
            new PerInfo{
                Name = "小新",
                Age = 21,
                Tel = new List<string>{"1330708****"}
            },
            new PerInfo{
                Name = "小军",
                Age = 23,
                Tel = new List<string>{"1380524****"}
            }
        };
    
        List<PerInfo> listPer2 = new List<PerInfo>
        {
            new PerInfo{
                Name = "小日",
                Age = 25,
                Tel = new List<string>{"1535010****"}
            },
            new PerInfo{
                Name = "小月",
                Age = 26,
                Tel = new List<string>{"1330708****"}
            },
            new PerInfo{
                Name = "小明",
                Age = 27,
                Tel = new List<string>{"1380524****"}
            }
        };
    
    
        var query1 = from lp1 in listPer1
                     from lp2 in listPer2
                     select new { lp1, lp2 };
    
        foreach (var s in query1)
        {
            Console.WriteLine("{0}  {1} ", s.lp1.Name, s.lp2.Name);
        }
    
        Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++");
    
        var query2 = from lp1 in listPer1
                     where lp1.Age > 20
                     from lp2 in listPer2
                     where lp2.Age > 25
                     select new{ lp1, lp2};
    
        foreach (var s in query2)
        {
            Console.WriteLine("{0}  {1} ", s.lp1.Name, s.lp2.Name);
        }
    
        Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++");
    
        var query3 = from lp1 in listPer1
                     from lp2 in listPer2
                     where lp2.Age > 25
                     select new{lp1, lp2 };
    
        foreach (var s in query3)
        {
            Console.WriteLine("{0}  {1} ", s.lp1.Name, s.lp2.Name);
        }
    
        Console.ReadLine();
    }
    输出结果:
    小白  小日
    小白  小月
    小白  小明
    小新  小日
    小新  小月
    小新  小明
    小军  小日
    小军  小月
    小军  小明
    +++++++++++++++++++++++++++++++++++++++++++
    小新  小月
    小新  小明
    小军  小月
    小军  小明
    +++++++++++++++++++++++++++++++++++++++++++
    小白  小月
    小白  小明
    小新  小月
    小新  小明
    小军  小月
    小军  小明
    复合 from 子句用于访问单个数据源中的内部集合。 不过,查询还可以包含多个可从独立数据源生成补充查询的 from 子句。 使用此技术可以执行某些类型的、无法通过使用 join 子句执行的联接操作。
  • 相关阅读:
    【转】1.5 万字 CSS 基础拾遗(核心知识、常见需求)
    【转】Git不要只会pull和push,试试这5条提高效率的命令
    【转】响应式布局的常用解决方案对比(媒体查询、百分比、rem和vw/vh)
    【ASP.NET Core】MVC模型绑定——实现同一个API方法兼容JSON和Formdata输入
    【ASP.NET Core】MVC模型绑定:自定义InputFormatter读取CSV内容
    【ASP.NET Core】MVC模型绑定:非规范正文内容的处理
    PHP 跨域
    MAC如何使用Docker 配置PHP + Nginx运行环境
    PHP的http_build_query() 方法,数组里面的bool类型会被转化为 1 和 0.
    Mac环境下RabbitMq安装与测试教程
  • 原文地址:https://www.cnblogs.com/haibing0107/p/6484022.html
Copyright © 2020-2023  润新知