1

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

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

我尝试了很多方法,但“DisplayName”不是有效字段。对此的任何帮助将不胜感激。谢谢你。

4

2 回答 2

1

这里有几个选项。

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
}
于 2012-09-26T14:46:35.523 回答
0

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

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

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

DisplayName = g.First().DisplayName
于 2012-09-26T14:44:50.643 回答