1

最初のテーブルのフィールドでグループ化し、最初のテーブルフィールドを合計し、2番目のフィールドからの単一のフィールドを含むクエリを作成しようとしています。結合されたテーブルからフィールドを参照しようとすると、エラーが発生し続けます。

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

多くのことを試しましたが、「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 に答える