我有一个像这样的模型:
public class Post
{
public int PostId,
public List<Category> Categories
}
帖子至少具有1个类别,但也可以具有许多类别。
我有一个列表,此列表包含帖子(有些具有相同的PostId),并且列表中的每个条目仅包含一个唯一的类别(每个类别的Categories.Count = 1)。
我想创建一个仅包含不同帖子(与众不同的PostId)的新列表,类别列表中填充了具有相同PostId的原始列表中的每个类别。
基本上,在原始列表中找到每个帖子,然后通过在“类别”字段中将它们的每个“第一”(也是唯一)条目添加在一起来填充“类别”字段。
在linq中有一个很好的解决方案吗?
类别只是一个枚举,
我试过使用各种嵌套的foreach和for循环,它可以工作,但那是毛骨悚然的。我知道有一种干净的方法可以做到这一点。
例子:
类别= {PostId = 1,类别=购物},{PostId = 1,类别=披萨},{PostId = 2,类别=洗衣}
排序后,期望的输出为:
类别= {PostId = 1,类别=购物,比萨饼},{PostId = 2,类别=洗衣店}
顺序与类别列表无关
鉴于每个帖子只有一个类别(如第二段所述),您可以尝试
var result = aPosts
.GroupBy(item => item.PostId, item => item.Categories[0])
.Select(group => new Post() { PostId = group.Key, Categories = new List<Category>(group) })
.ToList();
请注意,拥有同时接受PostId和Categories的Post构造函数将允许任何解决方案的简化版本。
Post(int postId, IEnumerable<Category> categories)
{
PostId = postId;
Categories = new List<Category>(categories);
}
将允许以下内容:
var result = aPosts
.GroupBy(item => item.PostId, item => item.Categories[0])
.Select(group => new Post(group.Key, group))
.ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句