我有一个元素列表。我需要在类别名称为“XYZ”的每个属性上使用筛选器来获取所有元素。如何使用C#过滤列表LINQ
以下查询明确地对属性进行筛选以选择类别名称为“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; }
}
“失败”是什么意思?异常抛出还是不是预期的结果? – Fabio
你为什么限制为单行lambdas?这样做可能会妨碍可读性和可维护性。 – Cameron
是不是像'var filteredElements = elements.Where(el => el.attributes.Any(ca => ca.Name ==“Alarm”))'? – 2016-09-30 19:28:49