假设这是我的成员(member)类
class Member
{
public string CategoryId { get; set; }
public string MemberName { get; set; }
public int Distance { get; set; }
}
而且,这是列表。
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});
任何人都可以建议逻辑/linq 查询以获取具有不同/唯一 categoryID 和最短距离的列表。
输出
应该是:
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});
最佳答案
这应该能满足您的需求:
var grouped = list.GroupBy(item => item.CategoryId);
var shortest = grouped.Select(grp => grp.OrderBy(item => item.Distance).First());
它首先将具有相同 CategoryId
的项目分组,然后从每组中选择第一个(按 Distance
排序)。
更新: 如果愿意,您也可以将所有这些链接在一起:
var shortest = list.GroupBy(item => item.CategoryId)
.Select(grp => grp.OrderBy(item => item.Distance)
.First());
关于c# - Linq 查询以获取列表中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20883890/