马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

Linq语法学习,Linq语法教程

[复制链接]
查看3160 | 回复1 | 2017-5-11 08:58:39 | 显示全部楼层 |阅读模式
什么是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语句去数据库执行的,不能识别我们的自定义方法也很正常。


语法:
[C#] 纯文本查看 复制代码
 var r2 = from t in test 
where t.Id>1 
select t




按条件选择:
[C#] 纯文本查看 复制代码
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);
}




排序:
[C#] 纯文本查看 复制代码
var list3 = from p in list
orderby p.Age, p.Salary descending
select p;//先通过年龄默认的升序排序,年龄相同的话在通过工资降序排序
foreach (var person in list3)
{
Console.WriteLine(person);
}




分组:
[C#] 纯文本查看 复制代码
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);
}
}




表连接:
[C#] 纯文本查看 复制代码
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 的写法(因为编译后是同一个东西,所以当然可以混用)。
[C#] 纯文本查看 复制代码
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();



C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
ibcadmin | 2017-5-11 09:00:17 | 显示全部楼层
241241241
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则