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