LINQ - 在对象列表中获取特定类型的所有成员

时间:2013-03-27 20:38:19

标签: c# linq

我有一个班级持有Color和一个字符串:

 public class Magic{
   public string Name {get; set;}
   public Color MyColor {get; set;}
 }

我有一份清单:

List<Magic> MyList = new List<Magic>();

我对LINQ没有太多经验,我想知道如何将Color中的所有List个对象转换为List s的新Color

3 个答案:

答案 0 :(得分:6)

您可以使用Select方法:

List<Color> magicColors = MyList
    .Select(magic => magic.MyColor)
    .ToList();

如果您只想要唯一颜色:

List<Color> magicColors = MyList
    .Select(magic => magic.MyColor)
    .Distinct()
    .ToList();

我们的想法是,对于每个Magic,它都会提取MyColor。这就是Select(magic => magic.MyColor)的作用。

答案 1 :(得分:1)

问题有点模糊,如果你正在寻找颜色投影,那么@ChrisSinclair答案是正确的。

另一方面,如果您想按颜色过滤,那么您可以这样做:

var magicS = (from magic in MyList where magic.MyColor == s select magic).ToList();

var magicS = MyList.Where(m => m.MyColor == s).ToList();

答案 2 :(得分:0)

我使用了.FindAll方法。

var lst = GetAllProducts();

List<ProductModel> sel = lst.FindAll(x => x.IsActive == true);

return sel;

我有一种方法可以将所有产品放入List&lt;&gt;中。我的产品模型有一个名为IsActive(一个布尔值)的属性。

此代码会创建一个新的List&lt;&gt;只有Active = True产品。