当List<SearchResult> Results
属性不同时,我有一个Category
会返回单个Item
属性的多个结果。
例如,结果可能是:
SearchResult[0].Category = "Food"
SearchResult[0].Item = "Ham"
SearchResult[1].Category = "Food"
SearchResult[1].Item = "Cheese"
SearchResult[2].Category = "Food"
SearchResult[2].Item = "Crackers"
SearchResult[3].Category = "Drink"
SearchResult[3].Category = "Juice"
等
现在我想像这样显示它们:
食物类别中的项目包括:火腿,奶酪和饼干
饮品类别中的项目包括:饮料
等
但这就是我现在所拥有的:
@foreach (SearchResult result in Results)
{
<p>Items in the @result.Category category include: @result.Item </p>
}
当然显示如下数据:
食物类别中的项目包括:火腿
食品类别中的商品包括:奶酪
食品类别中的商品包括:饼干
饮品类别中的项目包括:果汁
现在我觉得必须有一些LINQ魔法,我可以在List
上工作并正确地执行此操作,而不是手动编码将它们分成单个列表的循环。
诀窍是什么?
答案 0 :(得分:3)
诀窍是使用group clause / GroupBy Method。
var query = from result in Results
group result by result.Category;
和
@foreach (var g in query)
{
<p>Items in the @g.Key category include:</p>
<ul>
@foreach (var x in g)
{
<li>@x.Item</li>
}
</ul>
}
答案 1 :(得分:-1)
蛮力,但......(所有代码未经测试,但应该或多或少正确)
SearchResult
.Select(sr => sr.Category)
.Distinct()
.ToList()
.ForEach(c =>
Console.Out.WriteLine("Items in the "
+ c
+ " category include: "
+ String.Join(",",
SearchResult
.Where(i => i.Category == c).Select(i => i.Item)))
);
@dtb建议的或GroupBy:
SearchResult
.GroupBy(sr => sr.Category)
.ToList()
.ForEach(g => Console.Out.WriteLine("Items in the "
+ g.Key
+ " category include: "
+ String.Join(",", g.Select(i=>i.Item))));