我有一个包含属性集合的集合。 每个属性都有一个类型和一个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是字符串数组。

===============>>#1 票数:2 已采纳

我会做:

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集合实际上代表了属性类型的集合。

  ask by jason translate from so

未解决问题?本站智能推荐:

关注微信公众号