【问题标题】:Get results from multiple tables after grouping using Linq-to-SQL使用 Linq-to-SQL 分组后从多个表中获取结果
【发布时间】:2012-03-06 14:20:12
【问题描述】:

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

希望在 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}

这里的问题是在select子句中找不到e.CalendarDay

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

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

【问题讨论】:

    标签: sql-server join linq-to-sql group-by where


    【解决方案1】:

    如果我理解正确,这就是你要找的:

    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)}
    

    【讨论】:

    • 谢谢,但您似乎只更改了连接的语法。但是,您的联接语法不起作用。如果我删除 group 子句,那么它可以工作,但是添加 group 会导致问题。
    • 干得好。它工作(我的旧加入,但你的选择和加入),做得好
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2012-05-15
      • 2011-12-08
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多