我有以下名為“人”的課程。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Hobby { get; set; }
}
我創建了一個包含以下資料的串列:
List<Person> users = new List<Person>()
{
new Person {Id= 1, Name = "Silva", Hobby = "Football" },
new Person {Id= 2, Name = "Bob", Hobby = "Golf"},
new Person {Id= 2, Name = "Bob", Hobby = "Tennis"},
new Person {Id= 1, Name = "Silva", Hobby = "Sleeping"},
new Person {Id= 3, Name = "Sue", Hobby = "Drinking"}
new Person {Id= 1, Name = "Silva", Hobby = "Handball"},
new Person {Id= 3, Name = "Sue", Hobby = "Football"},
};
現在我需要創建一個名為“usersHobbies”的新串列,呼叫它時會回傳以下結果。
Id Name Hobby
1 Silva Football, Sleeping, Handball
2 Bob Golf, Tennis
3 Sue Drinking, Football
uj5u.com熱心網友回復:
你會用它
如果要回傳新Person型別而不是匿名型別,只需更新Select:
.Select(g => new Person
{
Id = g.Key,
Name = g.First().Name,
Hobby = string.Join(", ", g.Select(u => u.Hobby))
})
從您的評論更新:
是否可以代替 string.join() 回傳串列或陣列
是的。使用匿名型別:
var result = users.GroupBy(u => u.Id) // group by Id
.Select(g => new // select values
{
Id = g.Key,
Name = g.First().Name,
Hobbies = g.Select(u => u.Hobby).ToList()
})
.ToList();
它回傳一個List<string>for Hobbies。
uj5u.com熱心網友回復:
.GroupBy()有一個覆寫,可讓您定義鍵選擇器、元素選擇器和結果選擇器 ( docs ),這可能適合您的用例:
var result = users
.GroupBy(
u => new { u.Id, u.Name }, // key selector
u => u.Hobby, // element selector
(user, hobbies) => new Person {
Id = user.Id,
Name = user.Name,
Hobby = string.Join(", ", hobbies) })
.ToList();
在這里,(user, hobbies)分別參考鍵選擇器和元素選擇器。
會發生什么:
Id根據和Name(鍵選擇器)的組合將用戶分組為唯一用戶- 每個唯一用戶的愛好都被收集到一個
IEnumerable<string>(元素選擇器)中 - 對于每個唯一用戶,
Person都會創建一個物件并填充所有用戶的愛好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427141.html
上一篇:EFCore:GroupByFailure-不支持包含沒有組合的分組引數的“選擇”的翻譯
下一篇:在物體框架中查找多個OR引數
