Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#实体框架7 Linq到实体检查多个表中是否存在数据_C#_Asp.net_.net_Entity Framework_Linq To Entities - Fatal编程技术网

C#实体框架7 Linq到实体检查多个表中是否存在数据

C#实体框架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)

我试图确定三个表中是否存在记录

表格映射

RbMapping

RgMapping

我正在使用ef7
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万条记录。。