2012-09-26 85 views
1

我试图创建一个查询,在第一表中的字段组,从第二个总结第一表的字段,并且包括单场Linq中的组相关领域。尝试引用连接表中的字段时,我不断收到错误。包括查询

表1:用户

Id 
DisplayName 

表2:TimeEntries

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

我试过很多THI ngs但“DisplayName”不是有效的字段。 任何帮助,将不胜感激。谢谢。

回答

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 
} 
+0

随着一点点的清理我得到了它! 第一个查询在用户表上没有联接(我是否缺少某些东西?) 清理第二个问题后,出现错误:“方法'Single'和'SingleOrDefault'只能用作最后的查询操作,请考虑在这个实例中使用方法'FirstOrDefault'。“ 更改单到单或默认了吧!谢谢!!! – bootRom

+0

首先查询使用导航性能 - TimeEntry.User(您可能会或可能不会有),而不是加盟。 –

+0

你说得对,我喜欢。感谢您的跟进! – bootRom