zoukankan      html  css  js  c++  java
  • 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 子句执行的联接操作。
  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/haibing0107/p/6484022.html
Copyright © 2011-2022 走看看