C#LINQ

  

一、LINQ查询语法

String[] names = {"Alonso" , "Zheng", " Smith", "Smythe"};

Var queryResult = from n in names

Where n.StartsWith("S")

Select n;

Foreach (var item in queryResult )

{

Console.WriteLine(item.ToString());

}

 

1、指定数据源:from子句

From n in names

2、指定条件:where子句

Where n.StartsWith("S")

3、指定元素:select子句

Select n;

4、完成:使用foreach循环

foreach语句迭代结果

5、延迟执行的查询

Foreach语句并不是LINQ的一部分,它只是迭代结果。虽然foreach结构并不是LINQ的一部分,但它是实际执行LINQ查询的代码。查询结果变量仅保存了执行查询的一个计划,在访问查询结果之前,并没有提取LINQ数据,这成为查询的延迟执行或迟缓执行。生成结果序列的查询都要延迟执行。

二、LINQ方法语法

String[] names = {"Alonso" , "Zheng", " Smith", "Smythe"};

Var queryResult = names.Where(n=>n.StartWith("S"));

Foreach (var item in queryResult )

{

Console.WriteLine(item.ToString());

}

 

1、Lambda表达式

n=>n.StartWith("S");

C#把这个式子编译为一个匿名方法;

三、LINQ查询语法对结果进行排序

Var queryResults = from n in names

where n.StartWith("S")

orderby n

select n;

orderby子句默认为升序(AZ),降序(descending

Orderby n descending

 如果按照字符串中的最后一个字母排序

Orderby n.SubString(n.Length - 1)

 

三、LINQ方法语法对结果进行排序

Var queryResults = names.OrderBy(n=>n).Where(n=>n.StartsWith("S"));

 

四、示例:查询

public static int[] Numbers(int count)

        {

            Random random = new Random(0);

            int[] result = new int[count];

            for (int i = 0; i < count; ++i)

            {

                result[i] = random.Next();

            }

            return result;

        }

查询语法

int[] result = Numbers(100000);

         var queryResult = from n in result

                           where n < 100000000

                           select n;

         int a = queryResult.Count();

 

方法语法

         var queryresult = result.Where(n => n < 1000000);

 

五、聚合运算符

Count()Min()Max()Average()Sum()

queryResult.Count();

queryResult.Min();

queryResult.Max();

queryResult.Average();

queryResult.Sum();

 

六、查询复杂对象

public class Stu

        {

            public int ID;

            public string Name;

        }

  List<Stu> listStu = new List<Stu>{

                                                

 new Stu { ID = 1, Name = "af", Address="e" },

                                        new Stu { ID = 4, Name = "bh", Address="e" },

                                        new Stu { ID = 2, Name = "ce", Address="e" },

                                        new Stu { ID = 3, Name = "dg", Address="e" }

                                              };

 

            var queryResult = from n in listStu

                              where n.ID > 2

                              orderby n.Name

                              select n.Name;

 

 

new Stu { ID = 1, Name = "af" }是对象初始化器

 

七、投影:在查询中创建新对象

1、查询语法:投影

其中上示例中的

select n.Name;

就是一个投影,得到新的对象姓名的集合

也可以表示为

select new { n.Name, n.Address };

2、方法语法:投影

            var queryResult = listStu.Where(n => n.ID > 2)

                                     .Select(n => new { n.Name, n.Address });

 

 

八、单值选择查询

1、查询语法:

      var queryResult = (from n in listStu

                                where n.ID > 2

                                orderby n.Name

                                select n.Name).Distinct();

 

2、方法语法:

 

            var queryResult = listStu.Where(n => n.ID > 2)

                                    .Select(n => new { n.Name, n.Address }).Distinct();

 

九、AnyAll

确定数据是否满足某个条件,或者确保所有数据都满足某个条件

   bool result = listStu.All(n => n.ID == 2);

 

十、多级排序

1、查询语法

var queryResult = (from n in listStu

                                where n.ID > 2

                                orderby n.Name,n.ID

                                select n.Name).Distinct();

 

2、方法语法:     

var queryResult = listStu.OrderBy(n => n.ID)

                                      .ThenByDescending(n => n.Name)

                                      .Select(n => new { n.ID, n.Address });

十一、组合查询:

 

十二、TakeSkip

十三、集运算符

Union()Intersect()

十四、Join查询

Var queryResult = from c in Customers

Join o in Orders on c.ID equals o.ID

Select new{c.ID, o.ID};

十五、

 

 

 

原文地址:https://www.cnblogs.com/gengyuanchao/p/2734595.html