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

时间:2011-11-22 19:05:01

标签: c# linq

我有以下课程:

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?

3 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

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 :(得分:1)

假设您要为具有特定颜色的对象MyItems中的每个项目创建新的A,您可以这样做:

from a in originalItems
where a.color == color
from myItem in a.MyItems
select new A { /* not sure what you want here */ }

答案 2 :(得分:0)

这将为您提供原始项目中所有MyItem的列表,其中它是您想要的颜色:

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