【发布时间】:2016-09-30 19:21:58
【问题描述】:
我有一个元素列表。我需要在类别名称为“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; }
}
【问题讨论】:
-
你所说的“失败”是什么意思?抛出异常还是不是预期的结果?
-
为什么要限制为单行 lambda?这样做可能会妨碍可读性和可维护性。
-
不就是
var filteredElements = elements.Where(el => el.attributes.Any(ca => ca.Name == "Alarm"))吗? -
@Fabio 不确定你为什么删除了你的答案......我不同意 OP 写的关于它的批评“但我也想要这些过滤属性的元素细节。”
-
您的代码示例有不匹配的括号。我认为有可能做你想做的事,我只是不知道那是什么。