如何使用C#LINQ过滤列表

时间:2016-09-30 19:21:58

标签: c# linq

我有一个元素列表。我需要在类别名称为“XYZ”的每个属性上使用过滤器获取所有元素。

以下查询肯定会对属性进行过滤,以选择类别名称为“XYZ”的属性,但我也希望这些过滤属性的元素详细信息。

var filteredAttributes = attributes.Where(at => at.Categories.Any(ca => ca.Name == "XYZ")).Any()).ToList();

但是如果我对元素进行相同的过滤,我会在属性上没有过滤器的情况下得到所有元素。 是否可以创建单行查询来过滤元素以获取必要的属性?

这是我试过的LINQ查询失败:

var filteredElements = elements.Where(el => el.attributes.Where(at => at.Categories.Any(ca => ca.Name == "Alarm")).Any()).ToList();

以下是定义的类:

public class Element
{
    public string Name { get; set; }
    public string ID { get; set; }
    public Boolean HasChildren { get; set; }
    public List<Attribute> Attributes { get; set; }
}
    public class Attribute
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string Value { get; set; }
    public string WebID { get; set; }
    public List<Category> Categories { get; set; }
}

public class Category 
{
    public string Name { get; set; }
    public string Description { get; set; }
}

1 个答案:

答案 0 :(得分:1)

只需将您的第一个查询放在Where的{​​{1}}内 我认为对类别

的内部elements的属性使用Any就足够了
Any