繁体   English   中英

是否有更好或更有效的方法来过滤linq

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM