鉴于此课程:
public class Tool
{
public int Id { get; set; }
public int Number { get; set; }
public string Source { get; set; }
}
这样的工具列表:
var tools = new List<Tool>()
{
new Tool {Id=444, Number=121, Source="Master"},
new Tool {Id=777, Number=121, Source="M1"},
new Tool {Id=333, Number=51, Source="Master"},
new Tool {Id=555, Number=61, Source="Master"},
new Tool {Id=848, Number=51, Source="M1"}
//Many more
};
我如何使用Linq获取不同工具的数量列表,如果2个工具具有相同的数字,则选择其来源为&#34; M1&#34;,结果列表将包含:
Tool {Id=777, Number=121, Source="M1"}
Tool {Id=848, Number=51, Source="M1"}
Tool {Id=555, Number=61, Source="Master"}
答案 0 :(得分:2)
尝试按编号分组并获取其中的第一个元素
List<Tool> distinctTool = tools.GroupBy(p => p.Number)
.Select(f => f.OrderByDescending(q => q.Source == "M1").First())
.ToList();
<强> WORKING FIDDLE
强>
答案 1 :(得分:2)
您需要按照号码对Tools
进行分组,然后获取First()
个号码
List<Tool> distinctTool = tools
.GroupBy(p => p.Number)
.Select(g => g.OrderByDescending(q => q.Source == "M1").First())
.ToList();
答案 2 :(得分:2)
List<Tool> distinctTool = tools
.GroupBy(p => p.Number)
.Select(g => g.OrderByDescending(q => q.Source == "M1").First())
.ToList();