C#实体框架7 Linq到实体检查多个表中是否存在数据
我试图确定三个表中是否存在记录 表格映射: RbMapping: RgMapping: 我正在使用ef7C#实体框架7 Linq到实体检查多个表中是否存在数据,c#,asp.net,.net,entity-framework,linq-to-entities,C#,Asp.net,.net,Entity Framework,Linq To Entities,我试图确定三个表中是否存在记录 表格映射: RbMapping: RgMapping: 我正在使用ef7dbContext访问这些表 我已经编写了两个LINQ示例,但不确定它是否能够针对大量数据执行 方法1: bool isExist = dbContext.MappingTable .AsNoTracking() .Where(x => x.mappingCode == 1234)
dbContext
访问这些表
我已经编写了两个LINQ示例,但不确定它是否能够针对大量数据执行
方法1:
bool isExist = dbContext.MappingTable
.AsNoTracking()
.Where(x => x.mappingCode == 1234)
.Any(x => x.RbMappings.Any(y => y.MappingId == x.MappingId && y.RbId == 3)
&& x.RgMapping.Any(z=> z.MappingId == x.MappingId && z.RgId == 2);
方法2:
bool IsExist = (from mp in dbContext.MappingTable
join rb in dbContext.RbMapping on new
{
JoinProperty1 = mp.MappingId,
JoinProperty2 = rbId // Will be input field = 3
}
equals new
{
JoinProperty1 = rb.MappingId,,
JoinProperty2 = rb.RbId
}
join rg in dbCContext.RgMappings on new
{
JoinProperty1 = rb.MappingId,
}
equals new
{
JoinProperty1 = rb.MappingId,
}
where hs.MappingCode == 1234
select mp).AnyAsync();
谁能建议哪一种方法更适合处理大量数据?我将多次运行这些Linq查询
这些表也是巨大的,大约有400万条记录。第二种方法在代码清洁度方面更好,在这两种情况下都是执行单个查询,因此它主要是基于意见的。我想您检查了生成的SQL了吗?请注意,在第一个方法中,
y.MappingId==x.MappingId
和z.MappingId==x.MappingId
条件是冗余的,因为它们是由所使用的导航属性提供的。@EhsanSajjad如果他在第一个查询的末尾添加了Any
,并删除了其中的冗余条件,它应该产生与第二个相同的SQL,代码更少,通常使用导航属性而不是连接是编写EF查询的推荐方法。。。这些表格中有多少行?谢谢大家的评论,我正在看你们的建议。表将有大约400万条记录。第二种方法在代码清洁度方面更好,在这两种情况下都是执行单个查询,因此它主要是基于意见的,我想您检查过生成的SQL了吗?请注意,在第一个方法中,y.MappingId==x.MappingId
和z.MappingId==x.MappingId
条件是冗余的,因为它们是由所使用的导航属性提供的。@EhsanSajjad如果他在第一个查询的末尾添加了Any
,并删除了其中的冗余条件,它应该产生与第二个相同的SQL,代码更少,通常使用导航属性而不是连接是编写EF查询的推荐方法。。。这些表格中有多少行?谢谢大家的评论,我正在看你们的建议。该表将有大约400万条记录。。