Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 具有多个连接的Linq查询_C#_Entity Framework_Linq - Fatal编程技术网

C# 具有多个连接的Linq查询

C# 具有多个连接的Linq查询,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在使用实体框架来处理我的数据库,我需要帮助形成一个LINQ查询,它将帮助我获得LoginId列和AccNumber列。我只需要为每一个帐户号码1 LoginId,不管它是哪个LoginId。目前,大约有800K个Loginid,只有约3000个Acc 因此,最后我需要1个与1个LoginId关联的账号。所以我应该有大约3000行和2列。 以下是我需要加入的表格: 项目 ItemId、AccNumber、其他不相关的列 阻止项目 ItemId、BlockId和其他不相关的列 书籍版本\u块 B

我正在使用实体框架来处理我的数据库,我需要帮助形成一个LINQ查询,它将帮助我获得LoginId列和AccNumber列。我只需要为每一个帐户号码1 LoginId,不管它是哪个LoginId。目前,大约有800K个Loginid,只有约3000个Acc

因此,最后我需要1个与1个LoginId关联的账号。所以我应该有大约3000行和2列。

以下是我需要加入的表格:

项目

ItemId、AccNumber、其他不相关的列

阻止项目

ItemId、BlockId和其他不相关的列

书籍版本\u块

BookversionId、BlockId和其他不相关的列

Sudent

LoginId、BookversionId和其他不相关的列


理想情况下,我希望使用LINQ复制此SQL查询(只是尝试提供尽可能多的信息)

这是我尝试过的,但是,我得到的结果是不正确的,我得到了183000条记录。显然是因为我的LINQ查询不正确,这就是我请求帮助的原因

var q = (from items in context.Items
         join context.Block_Item
         on items.ItemId equals bi.ItemId into bi
         join context.BookletVersion_Block
         on bi.Select(x => x.BlockId).FirstOrDefault() equals BVB.BlockId into BVB
         join context.Students
         on BVB.Select(x => x.BookletVersionId).FirstOrDefault() equals st.BookletVersionId into st
          //'VH098334'
          select new { LoginId = st.Select(x => x.LoginId).FirstOrDefault().ToString(), AccNum = items.AccessionNumber.ToString() });

您可以在select语句中使用子查询和
FirstOrDefault
,以获取
LoginId

var query =
   from items in context.Items
   select new 
   {
      AccNum = items.AccessionNumber,
      LoginId = (
         from bi in context.Block_Item  
         join bb in context.BookletVersion_Block on bi.BlockId equals bb.BlockId
         join st in context.Students on bb.BookversionId equals st.BookversionId
         where items.ItemId == bi.ItemId
         select st.LoginId
      ).FirstOrDefault()
   };

您是否在实体框架上下文中设置了任何关系?(例如,
item.Block
?)太好了,谢谢!似乎在做什么,但20分钟后超时!你知道如何加快速度,这样就不会花那么长时间吗?@NikolayAdvolodkin-你可能在
的where
/
join
列中缺少索引
var query =
   from items in context.Items
   select new 
   {
      AccNum = items.AccessionNumber,
      LoginId = (
         from bi in context.Block_Item  
         join bb in context.BookletVersion_Block on bi.BlockId equals bb.BlockId
         join st in context.Students on bb.BookversionId equals st.BookversionId
         where items.ItemId == bi.ItemId
         select st.LoginId
      ).FirstOrDefault()
   };