Linq语法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linq语法相关的知识,希望对你有一定的参考价值。

Linq简介:

什么是Linq:语言集成查询,和C#的集合的扩展方法作用类似
辟谣:Linq to sql微软已经不再推荐使用,但Linq to object 和Linq to entity(重点发展)任然在发展

Linq to object操作的是内存中的数据,Linq to Entity操作的是EF中的数据,这两者结合起来使用就需要注意一些问题了:
1、Linq to object join Linq to Entity,使用这样的方式进行连接查询时,无论如何写数据的过滤条件,都会造成EF进行全表扫描。但是我们不用对object数据进行处理就可以实现连接查询。
2、Linq to Entity join Linq to object ,使用这种方式我们写上数据的过滤条件后,就不会照成ef进行全表扫描,但是我们用于连接的object数据只能是Int32 ,String,Guid等基元数据,我们在进行连接查询时要提前把数据处理好。
注:Linq to Entity查询数据时,在没有遍历数据前(ToList(),ToArray()等,也就是数据还没有被拿到本地内存),表达式中不能包含我们自定义方法和其他涉及类型装换的方法都不能使用,不然会出现异常“不能将方法***转换为存储**”。原因是使用EF操作数据库时,EF是把我们的Linq(集合扩展)翻译成sql语句去数据库执行的,不能识别我们的自定义方法也很正常。

 

 语法:

1 var r2 = from t in test 
2 where t.Id>1 
3 select t

按条件选择:

var list3 = list.Where(p => p.Age > 5).Select(p => new { name = p.Name, age = p.Age } );
//var list3 = from p in list
// where p.Age > 5
// select new { 姓名 = p.Name,年龄=p.Age};

foreach (var person in list3)
{
Console.WriteLine(person);
}

 

排序:

var list3 = from p in list
orderby p.Age, p.Salary descending
select p;//先通过年龄默认的升序排序,年龄相同的话在通过工资降序排序
foreach (var person in list3)
{
Console.WriteLine(person);
}

 


分组:

var list3 = from p in list
group p by p.Age into g
select g;
foreach (var person1 in list3)
{
foreach (var person in person1)
{
Console.WriteLine(person);
}
}

 


表间连接:

var list1 = from d in dogs
join m in masters on d.MasterId equals m.Id//这里只能使用equals
select new { mastername = m.Name, dogname = d.Name };
foreach (var p1 in list1)
{
Console.WriteLine(p1);
}

 

注:

只有 Where,Select,OrderBy,GroupBy,Join 等这些能用 linq 写法,如果要用下面的 “ Max,Min,Count,Average,Sum,Any,First,FirstOrDefault,Single,SingleOrDefault,Distinct,Skip,Ta ke 等”则还要用 lambda 的写法(因为编译后是同一个东西,所以当然可以混用)。
var r1 = from p in list 
group p by p.Age into g
select new { Age = g.Key, MaxSalary = g.Max(p=>p.Salary), Count = g.Count() }; 
int c = r1.Count(); 
var c = (from p in list where p.Age>3 select p ).Count();

 

以上是关于Linq语法的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to XML - 从文件加载 XML 片段

错误 3002:映射片段中的问题 | c# linq 到实体

LINQ语句

在 C# 中使用 LINQ 方法语法 (LINQ to SQL) 时发生异常

linq简介

扁平化 xml 节点的 Linq 方法语法