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子句默认为升序(A到Z),降序(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();
九、Any和All
确定数据是否满足某个条件,或者确保所有数据都满足某个条件
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 });
十一、组合查询:
十二、Take和Skip
十三、集运算符
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};
十五、