22

次のLINQを使用して、テーブルからデータを選択しています。

(from m in entity.Results
where m.Group == 0 ||
m.Group == 1
orderby m.Points descending
select m);

これにより、グループ1または2に属するすべてのユーザーの結果が得られます。これにより、ユーザーが持っているポイントを表示できます。しかし、これは私に彼らがグループ1とグループ2で別々に持っているポイントを示しています。

それらをグループ化して、合計ポイントを表示するにはどうすればよいですか?だからこれの代わりに(私が今持っているもの):

user1 - group1 - 10
user1 - group2 - 7
user2 - group1 - 7
user2 - group2 - 5

これ欲しい:

user1 - total: 17
user2 - total: 12

そのような結果セットを取得するには、クエリをどのように調整する必要がありますか?

4

4 に答える 4

26

ユーザーをグループ化し、次を使用Sumして計算する必要がありTotalPointsます。

from m in entity.Results
where m.Group == 0 || m.Group == 1
group m by m.User into g
let TotalPoints = g.Sum(m => m.Points)
orderby TotalPoints descending
select new { User = g.Key, Username = g.Key.Username, TotalPoints };
于 2012-06-06T11:45:13.987 に答える
19
entity.Results
      .Where(m => m.Group == 0 || m.Group == 1)
      .GroupBy(m => m.UserID)
      .Select(m => new { User = m.Key, TotalPoints = m.Sum(v => v.Points) })
      .OrderByDescending(m => m.TotalPoints);
于 2012-06-06T11:45:52.667 に答える
2

こんにちはVivendiはこれを使用します(要件に応じて編集してください)

var q = (from h in entity.Results
group h by new { h.UserID} into hh
select new {
    hh.Key.UserID,
    Score = hh.Sum(s => s.Points )
}).OrderByDescending(i => i.Points);

出力

合計: 17

合計: 12

于 2012-06-06T11:51:39.450 に答える