有没有更好或更有效的方法来过滤linq
本文关键字:方法 过滤 linq 有效 更好 有没有 | 更新日期: 2023-09-27 18:17:25
我有一个包含属性集合的集合。每个属性都有一个类型和一个Id。我需要在一组属性类型中过滤属性id为或id的集合,但属性类型为和id。我想出了下面的方法,想知道是否有更好的方法。
foreach (var ag in andAttrGrpIds)
{
filteredModels = filteredModels.Where(x => x.ProductAttributes.Any(pa => pa.AttributeType==ag && orAttributes.Contains(pa.AttributeId))).ToList();
}
在上面的代码片段中,andattrgrpid和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
集合似乎实际上代表了属性-类型的集合。