在 Linq 中按查询分组包括相关字段



我正在尝试创建一个查询,该查询按第一个表中的字段分组,对第一个表字段求和,并包含第二个表中的单个字段。尝试引用联接表中的字段时,我不断收到错误。

表 1:用户

Id
DisplayName

表 2:时间条目

WeekEnding
UserId
Hours

查询:

from u in Users
join t in TimeEntries on u.Id equals t.UserId
group t by new {t.WeekEnding, t.UserId } into g
select new {WE = g.Key.WeekEnding, User = g.Key.UserId, 
HoursTotal = g.Sum(s => s.Hours), DisplayName = g.First(n => n.DisplayName)}

我已经尝试了很多东西,但"显示名称"不是一个有效的字段。对此的任何帮助将不胜感激。谢谢。

这里有几个选项。

from t in TimeEntries
group t by new {t.WeekEnding, t.UserId } into g
let firstT = t.First()
select new
{
  WE = g.Key.WeekEnding,
  User = g.Key.UserId
  HoursTotal = g.Sum(x => x.Hours)
  DisplayName = firstT.User.DisplayName
}

from t in TimeEntries
group t by new {t.WeekEnding, t.UserId } into g
let user = (from u in Users where u.UserId == g.Key.UserId select u).Single()
select new
{
  WE = g.Key.WeekEnding,
  User = g.Key.UserId
  HoursTotal = g.Sum(x => x.Hours)
  DisplayName = user.DisplayName
}

Enumerable.First(IEnumerable<TSource>, Func<TSource, Boolean>)返回序列中满足指定条件的第一个元素。

但我认为n.DisplayName是字符串而不是bool.

尝试另一个重载,它只返回序列中的第一个元素:

DisplayName = g.First().DisplayName

最新更新