Я использую Entity Framework для работы с моей БД, и мне нужна помощь в формировании запроса LINQ, который поможет мне получить столбцы LoginId и AccNumber. Мне нужно всего лишь 1 LoginId для каждого отдельного AccNumber, не имеет значения, в каком он был вход. В настоящее время существует около 800K LoginIds и только ~ 3000 AccNumber.Запрос Linq с несколькими объединениями
Следовательно, в конце мне нужно 1 AccNumber, связанное с 1 LoginId. Поэтому у меня должно быть ~ 3000 строк и 2 столбца.
Вот таблицы, мне нужно присоединившихся:
Элемента
Itemid, AccNumber, другие несущественные столбцы
Block_Item
Itemid, BlockId, другие несоответствующие столбцы
Bookversion_Block
BookversionId, BlockId, другие несущественные столбцы
Sudent
LoginID, BookversionId, другие несущественные столбцы
В идеале, я хочу повторить этот SQL запрос с использованием LINQ (просто стараюсь предоставить как можно больше информации)
select max(StudentId) as StudentId, BookletVersionId into #ST from Student
group by BookletVersionId
select #ST.BookletVersionId, LoginId into #T1 from #ST
join Student ST on #ST.StudentId = ST.StudentId
select BookletVersionId, BlockId into #BVB from BookletVersion_Block
where
BookletVersionId in (select BookletVersionId from #ST)
select #T1.BookletVersionId, #BVB.BlockId, LoginId into #T2 from #T1
join BookletVersion_Block #BVB on #T1.BookletVersionId = #BVB.BookletVersionId
select max(BlockId) as BlockId, ItemId into #BI from Block_Item
where
BlockId in (select BlockId from #T2)
group by ItemId
select BookletVersionId, #T2.BlockId, ItemId, LoginId into #T3 from #T2
join #BI on #T2.BlockId = #BI.BlockId
select max(LoginId) as LoginId, AccessionNumber from #T3
join Item I on #T3.ItemId = I.ItemId
group by AccessionNumber order by LoginId
Вот что я пробовал, однако результаты, которые я получил, неверны, и я возвращаюсь, как 183 000 записей. Очевидно, потому что мой запрос 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() });
Есть ли у вас какие-либо отношения, установленные в вашем Entity Framework контексте? (например, 'item.Block'?) – StriplingWarrior