gpt4 book ai didi

c# - 有没有更好或更有效的方法来使用 linq 进行过滤

转载 作者:行者123 更新时间:2023-11-30 17:14:44 24 4
gpt4 key购买 nike

我有一个包含属性集合的集合。每个属性都有一个类型和一个 Id。我需要过滤属性 ID 在一组属性类型中为 or'd 但属性类型为 and' 的集合。我想出了以下方法,想知道是否有更好的方法。

foreach (var ag in andAttrGrpIds)
{
filteredModels = filteredModels.Where(x => x.ProductAttributes.Any(pa => pa.AttributeType==ag && orAttributes.Contains(pa.AttributeId))).ToList();
}

在上面的代码片段中,andAttrGrpIds 和 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 集合似乎实际上代表了属性-类型 的集合。

关于c# - 有没有更好或更有效的方法来使用 linq 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8465735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com