[英]Is there a better or more efficient way to filter with linq
我有一个包含属性集合的集合。 每个属性都有一个类型和一个Id。 我需要过滤属性ID在一组属性类型中所属的集合,但属性类型是和。 我想出了以下内容并想知道是否有更好的方法。
foreach (var ag in andAttrGrpIds)
{
filteredModels = filteredModels.Where(x => x.ProductAttributes.Any(pa => pa.AttributeType==ag && orAttributes.Contains(pa.AttributeId))).ToList();
}
在上面的代码片段中,andAtrtrGrpIds和orAttributes是字符串数组。
我会做:
var filteredModels = from model in originalModels
let mAttribs = from pa in model.ProductAttributes
where orAttributes.Contains(pa.AttributeId)
select pa.AttributeType
where !andAttrGrpIds.Except(mAttribs).Any()
select model;
现在,它更具可读性,并且(可能)具有更好的性能配置文件。
我们的想法是从每个模型中获取所有“合格”产品属性类型的集合,然后测试此集合中是否存在所有 andAttrGrpIds
。
顺便说一句,你的命名约定似乎很奇怪: andAttrGrpIds
集合实际上代表了属性类型的集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.