簡體   English   中英

如何在LINQ中向分組結果中添加更多列?

[英]How to add more columns to a grouped result in LINQ?

我有這個LINQ語句,它產生一個字符串集合:

在此輸入圖像描述

如何更改此LINQ查詢以便生成int / string數組的集合,以便我可以在結果中包含語言ID?

像這樣的東西:

from u in Users
join l in Languages on u.LanguageId equals l.Id
group u by l.Name into g
orderby g.Count() descending
select new { Id = l.Id, NameAndCount = g.Key + " (" + g.Count() + ")" }

不成功的嘗試:

在此輸入圖像描述

在此輸入圖像描述

在此輸入圖像描述

您可以簡單地按Id對記錄進行分組,然后使用FirstOrDefault獲取Name

from u in Users
join l in Languages on u.LanguageId equals l.Id
group l by l.Id into g
orderby g.Count() descending
select new { Id = g.Key, NameAndCount = g.First().Name + " (" + g.Count() + ")" }

您只需要對代碼進行一些更改即可。 您應該按照語言和組的兩個字段/列對組進行分組,而不是按用戶分組。

from u in Users
join l in Languages on u.LanguageId equals l.Id
group l by new { l.Id, l.Name } into g
orderby g.Count() descending
select new { Id = g.Key.Id, NameAndCount = g.Key.Name + " (" + g.Count() + ")" }

另一個案例:

請注意,我們用於分組的每個字段都可以從.Key訪問,您可以命名字段

例1。

// ...
group l by new { MyId = l.Id, MyName = l.Name } into g
orderby g.Count() descending
select new { Id = g.Key.MyId, NameAndCount = g.Key.MyName + " (" + g.Count() + ")" }

如果在另一種情況下,我們不想丟失結果中的集合,只需添加一個UserList變量,如下例所示。

例2:

// ...
group l by new { l.Id, l.Name } into g
orderby g.Count() descending
select new { Id = g.Key.Id, NameAndCount = g.Key.Name + " (" + g.Count() + ")", UserList = g.ToList() }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM