什么是Linq
LINQ语言集成z查询(Language Integrated Query)是微软公司提供的一项新技术,用来替代传动sql语句的一个革命性技术,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据,是.NET Framework3.5以上版本支持的新技术,所在命名空间 using System.Linq.
linq按查询访问可分为四部分:Linq to slq、Linq to objects、Linq to DataSet、Linq to XML,分别为操作数据库(包括增删改查)、集合数组、DataSet内存中缓存数据、XML文件 。
Linq有表达式查询与方法查询两种查询方式。
本文重点是操作集合的方法查询。
较为常用的查询操作方法有:
筛选操作 Where
投影操作 Select
排序操作 OrderBy
聚合操作 Count,Sum、Max、Min、Average
元素操作 Single
数据类型转换操作 ToList、ToArray
说明:
筛选:将结果集限制为只包含那些满足指定条件的元素的操作,又称为选择。
投影:将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。通过使用投影,您可以构建依据每个对象生成的新类型。您可以映射属性,并对该属性执行数学函数。还可以在不更改原始对象的情况下映射该对象。
聚合:聚合运算从值集合计算单个值。比如计算平均数,计算总和都属于聚合操作。
所有的聚合操作均不适用于查询表达式语法
Count 统计元素个数
Max 确定集合中最大值
Min 确定集合中最小值
Sum 计算集合中值的总和
Average 计算集合中值的平均值
元素操作:从一个序列返回单个特定元素
所有的元素操作均不适用于查询语法
ElementAt 返回集合中指定索引处的元素
ElementAtOrDefault 返回集合中指定索引处的元素,如不存在返回默认值
First 返回集合中的第一个元素或满足条件的第一个元素
FirstOrDefault 返回集合中的第一个元素或满足条件的第一个元素。如果没有这样的元素,则返回默认值
Last 返回集合中的最后一个元素或满足条件的最后一个元素
LastOrDefault 返回集合中的最后一个元素或满足条件的最后一个元素。如果没有这样的元素,则返回默认值
Single 返回集合中的唯一元素或满足条件的唯一元素
SingleOrDefault 返回集合中的唯一元素或满足条件的唯一元素。如果没有这样的元素,则返回默认值
注:当使用ElementAt/First/Last/Single等方法时,如果取不到符合要求的值,程序将出错。可以使用对应的带OrDefault后缀的方法避免出错
//集合操作
internal static void linq1()
{
//集合初始化器
List<model.Product> list = new List<model.Product>{
new model.Product{ProductID=1,Name="Name1",Price=1m},
new model.Product{ProductID=2,Name="Name2",Price=2m},
new model.Product{ProductID=3,Category="Category1"},
new model.Product{ProductID=4,Category="Category2",Name="xg233"}
};
//linq方法查询
//输出全部,并转为list集合
var s1 = list.Select(f => f).ToList();
//输出ProductID==2的ProductID字段
var s2 = list.Where(q => q.ProductID == 2).Select(q => q.ProductID);
var f2 = from f in list where f.ProductID == 2 select f.ProductID;
//投影操作,输出对象ProductID==2的Name与Price字段
var s3 = list.Where(a => a.ProductID == 2).Select(a => new { a.Name, a.Price });
var f3 = from f in list where f.ProductID == 2 select new { f.Name, f.Price};
//根据ProductID字段排序
var s4 = list.OrderBy(f => f.Name).Select(f=>f.Name);
var f4 = from f in list orderby f.ProductID select f.Name;
//根据ProductID字段排序后在根据Name字段排序
var s5 = list.OrderBy(f => f.ProductID).ThenBy(f=>f.Name).Select(f => f.Name);
var f5= from f in list orderby f.ProductID,f.Name select f.Name;
//求和
var s6 = list.Sum(f => f.ProductID);
//求ProductID字段最小的那个对象
var s7 = list.Min(f => f.ProductID);
//返回ProductID>2的第一个元素
var s8 = list.Where(f => f.ProductID>2).Select(f => f.ProductID).First();
}
linq操作数组示例
internal static void array()
{
int[] scores = new int[] { 1, 2, 4, 6, 3, 7, 6 };
//linq表达式查询
//输出1, 2, 4, 6, 3, 7, 6
IEnumerable<int> f1 = from sc in scores select sc;
//输出 6, 7, 6
IEnumerable<int> f2 = from sc in scores where sc > 5 select sc;
//输出6,6,7
IEnumerable<int> f3 = from sc in scores where sc > 5 orderby sc select sc;
//linq方法查询
//输出1, 2, 4, 6, 3, 7, 6 查询全部
IEnumerable<int> s1 = scores.Select(s=>s);
//输出 6, 7, 6 查询 s > 5的数
IEnumerable<int> s2 = scores.Where(s => s > 5);
//输出6,6,7 查询 s > 5的数,并排序
IEnumerable<int> s3 = scores.Where(s => s>5).OrderBy(s=>s);
foreach (int i in f1)
{
Console.WriteLine(i);
}
}
Linq之集合对象
最新推荐文章于 2023-08-17 14:44:34 发布