使用 Linq-to-SQL 分组后从多个表中获取结果

发布于 2025-01-05 17:44:14 字数 719 浏览 0 评论 0原文

我认为答案应该很简单,但我只是在挣扎:

想要在 LINQ 查询中获取来自 2 个表的数据,类似于:

from f in Faults
join af in AvailabilityFaults on f.FaultID equals af.FaultID
join a in Availabilities on new { af.CalendarDay, af.CircuitNumber}
             equals new { a.CalendarDay, a.CircuitNumber}
join e in ExternalImportAvailabilities on new { a.CalendarDay, a.CircuitNumber }
                   equals new { e.CalendarDay, e.CircuitNumber }
where a.CalendarDay.Value.Day != 1
group f by f.FaultID into groupF
select new {groupF, e.CalendarDay}

这里的问题在于它找不到 e.CalendarDay 在选择子句中。

我还尝试过类似的方法: CalendarDay= e.Max(e=>e.CalendarDay),但 e 不在当前上下文中。

如何在 select 子句中添加表“e”中的数据?

I think the answer should be easy, but I'm just struggling:

Would like to have data from 2 tables in a LINQ query similar to:

from f in Faults
join af in AvailabilityFaults on f.FaultID equals af.FaultID
join a in Availabilities on new { af.CalendarDay, af.CircuitNumber}
             equals new { a.CalendarDay, a.CircuitNumber}
join e in ExternalImportAvailabilities on new { a.CalendarDay, a.CircuitNumber }
                   equals new { e.CalendarDay, e.CircuitNumber }
where a.CalendarDay.Value.Day != 1
group f by f.FaultID into groupF
select new {groupF, e.CalendarDay}

The problem here comes in that it can't find e.CalendarDay in the select clause.

I also tried things like: CalendarDay= e.Max(e=>e.CalendarDay), but e is not in the current context.

How can I add data from table 'e' in the select clause?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

转身以后 2025-01-12 17:44:14

如果我正确理解你的话,这就是你正在寻找的:

from f in Faults
join af in AvailabilityFaults on f.FaultID equals af.FaultID
join a in Availabilities on af.CalendarDay equals a.CalendarDay and af.CircuitNumber equals a.CircuitNumber
join e in ExternalImportAvailabilities on a.CalendarDay equals e.CalendarDay and a.CircuitNumber equals e.CircuitNumber
where a.CalendarDay.Value.Day != 1
group new {f, e} by f.FaultID into groupFE
select new {GroupF = groupFE.Select( gfe => gfe.f), CalendarDay = groupFE.Max( gfe => gfe.e.CalendarDay)}

If I understood you properly, this is what you are looking for:

from f in Faults
join af in AvailabilityFaults on f.FaultID equals af.FaultID
join a in Availabilities on af.CalendarDay equals a.CalendarDay and af.CircuitNumber equals a.CircuitNumber
join e in ExternalImportAvailabilities on a.CalendarDay equals e.CalendarDay and a.CircuitNumber equals e.CircuitNumber
where a.CalendarDay.Value.Day != 1
group new {f, e} by f.FaultID into groupFE
select new {GroupF = groupFE.Select( gfe => gfe.f), CalendarDay = groupFE.Max( gfe => gfe.e.CalendarDay)}
萝莉病 2025-01-12 17:44:14

如果您希望 e.CalendarDay 出现在您的选择中,那么您通常会将其包含在组中,如下所示

group f by new { f.FaultID , e.CalendarDay } into groupF
select new {groupF.Key.FaultID, groupF.Key.CalendarDay}

If you want e.CalendarDay in your select, then you normally would include it in the group, as in

group f by new { f.FaultID , e.CalendarDay } into groupF
select new {groupF.Key.FaultID, groupF.Key.CalendarDay}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文