Linq查询以获取列表中的不同值

PaR*_*RsH 8 c# linq c#-4.0

假设这是我的成员类

class Member 
{
    public string CategoryId { get; set; }
    public string MemberName { get; set; }
    public int Distance { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而且,这是列表.

var list = new List<Member>();
list.Add(new { CategoryId = "01", MemberName="andy" Distance=3});
list.Add(new { CategoryId = "02", MemberName="john" Distance=5});
list.Add(new { CategoryId = "01", MemberName="mathew" Distance=7});
list.Add(new { CategoryId = "03", MemberName="bakara" Distance=2});
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议逻辑/ linq查询,以使List具有最短距离的不同/唯一categoryID.

output应该是:

list.Add(new { CategoryId = "01", MemberName="andy" Distance=3});
list.Add(new { CategoryId = "02", MemberName="john" Distance=5});
list.Add(new { CategoryId = "03", MemberName="bakara" Distance=2});
Run Code Online (Sandbox Code Playgroud)

Kja*_*tan 22

这应该给你你需要的东西:

var grouped = list.GroupBy(item => item.CategoryId);
var shortest = grouped.Select(grp => grp.OrderBy(item => item.Distance).First());
Run Code Online (Sandbox Code Playgroud)

它首先将项目分组CategoryId,然后从每个组中选择第一个(按顺序排列Distance).