gpt4 book ai didi

c# - 带有长 where 子句的 Linq

转载 作者:行者123 更新时间:2023-11-30 13:42:29 25 4
gpt4 key购买 nike

有更好的方法吗?我试图遍历 partsToChange 集合并构建 where 子句,但它将它们组合在一起而不是将它们组合在一起。我也不想明确地对 partsToChange 列表中的每一项进行相等处理。

var partsToChange = new Dictionary<string, string> {
{"0039", "Vendor A"},
{"0051", "Vendor B"},
{"0061", "Vendor C"},
{"0080", "Vendor D"},
{"0081", "Vendor D"},
{"0086", "Vendor D"},
{"0089", "Vendor E"},
{"0091", "Vendor F"},
{"0163", "Vendor E"},
{"0426", "Vendor B"},
{"1197", "Vendor B"}
};

var items = new List<MaterialVendor>();
foreach (var x in partsToChange)
{
var newItems = (
from m in MaterialVendor
where
m.Material.PartNumber == x.Key
&& m.Manufacturer.Name.Contains(x.Value)
select m
).ToList();
items.AddRange(newItems);
}

附加信息:我在 LINQPad 中工作,这是一个 LinqToSql 查询。这里的 MaterialVendor 既是一个类又是一个 DataContext 表。

编辑:LinqToSql 详细信息。

这似乎是我发现的兼顾可读性和降低复杂性的最佳方法。它还具有不显式定义集合类型的额外好处。这意味着我可以改变匿名类型返回的内容。

var predicate = PredicateBuilder.False<MaterialVendor>();

foreach (var x in partsToChange)
{
var item = x;
predicate = predicate.Or (m =>
m.Material.PartNumber == item.Key
&& m.Manufacturer.Name.Contains(item.Value));
}

var items = from m in MaterialVendor.Where(predicate)
select m;

最佳答案

[编辑] 更好,因为 partsToChange 是一个 Dictionary:

var items = MaterialVendor.Where(m =>
m.Manufacturer.Name.Contains(partsToChange[m.Material.PartNumber])
).ToList();

关于c# - 带有长 where 子句的 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2900002/

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