Linq to EF 与Linq to Object
我们首先来看这段代码:(注意:Linq代码里是把内存中的数据代码,也就是Linq to object放在join前面,数据库的数据代码放在join后面)
- List<MyObject> objectList = new List<MyObject>();
- objectList.Add(new MyObject { Identity = 1, Name = "Jack", Age = 30 });
- objectList.Add(new MyObject { Identity = 2, Name = "Sam", Age = 28 });
- objectList.Add(new MyObject { Identity = 3, Name = "Lucy", Age = 23 });
- EntityRepository repository = new EntityRepository();
- DbSet<Entity> entitySet = repository.Context.Set<Entity>();
- var objectNames = (from ob in objectList
- join en in entitySet
- on ob.Identity equals en.SID
- select ob.Name).ToList();
Entity是数据库表,有一个bigint型,名为SID字段,其他俩个为Name和Notes。上面的代码中是把Linq to Object放在前面,Linq to Entity 放在join中,编译运行顺利。
实际的查询数据库的语句为:
- SELECT
- [Extent1].[SID] AS [SID],
- [Extent1].[Name] AS [Name],
- [Extent1].[Notes] AS [Notes]
- FROM [dbo].[Entity] AS [Extent1]
这里是整表查询。(可以打开Sql Server 2008 R2-->Performance Tools-->SQL Server Profiler, 来跟踪此语句)。
如果把以上代码改成select en.Name,仍然是整表查询。
如果是设计两个数据库表的查询,且最后是select 表中的某一列,则不可能是整表查询,而是单独查询了某一列;而这里把entity和object放在一起,就会涉及整表查询。此乃两者混合使用的第一弊端。
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · The instance of entity type ‘Customer’ cannot be tracked because another instance with the same key value for {‘Id’} is already being tracked.
- · .NET8实时更新nginx ip地址归属地
- · 解决.NET Blazor子组件不刷新问题
- · .NET8如何在普通类库中引用 Microsoft.AspNetCore
- · .NET8 Mysql SSL error
- · ASP.NET Core MVC的Razor视图渲染中文乱码的问题
- · .NETCORE 依赖注入服务生命周期
- · asp.net zero改mysql
- · .NET5面试汇总
- · .Net连接Mysql数据库的Convert Zero Datetime日期问题
- · vue使用element-ui中的Message 、MessageBox 、Notification
- · Asp.Net Core Filter 深入浅出的那些事-AOP