使用LINQ从具有n个元素的属性填充集合

3

我有以下的类:

public class A
{
   public List<object> MyItems { get; set; }
   public Color Color { get; set; }
   public object MyItem { get set; }
}

每个A实例可以拥有n个MyItems。

给定一个A列表,我需要按颜色对它们进行筛选,并创建一个新列表,在该列表中,为MyItems集合的每个元素创建一个新的A实例。

List<A> Aitems = originalItems.Where(b => b.color == color)
                              .Select(b=>
{
    A aItem = b;
    // Problem below. Is there a way to create more
    // aItems for every object in MyItems collection?
    b.MyItem = b.MyItems[0];
    return aItem;
}).ToList();

是否有一种使用LINQ创建MyItems集合中每个对象的更多aItems的方法,还是应该使用标准foreach循环?


5
您的问题目前相当不清楚,其中最主要的原因是您的类声明无效。如果您能够提供一个简短但完整的示例类,以及样本输入数据和您想要的输出,那将非常有帮助。 - Jon Skeet
请描述如何为MyItems中的每个对象创建更多的aItems。 - Abdul Munim
3个回答

2
你是否正在寻找类似这样的内容?
var query = from b in originalItems
            where b.Color == color
            from item in b.MyItems
            select new A
            {
                MyItems = b.MyItems,
                Color = b.Color,
                MyItem = item,
            };

var result = query.ToList();

1
假设您想为具有特定颜色的A对象中的每个项目创建新的A,您可以像这样操作:
from a in originalItems
where a.color == color
from myItem in a.MyItems
select new A { /* not sure what you want here */ }

问题明确要求一个包含“集合中每个元素的新A实例”的集合。 - svick

0

这将为您获取所有颜色符合要求的MyItems列表,从OriginalItems中筛选出来:

var items = (from a in OriginalItems
              where a.Color == color
              from item in a.MyItems
              select item).ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接