寻求优雅的linq解决方案

用户名

我有一个像这样的模型:

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,类别=洗衣店}

顺序与类别列表无关

37

鉴于每个帖子只有一个类别(如第二段所述),您可以尝试

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章