我想将一个项目列表与另一个列表进行匹配,其中考虑部分匹配。
考虑这两个列表,它们经过简化以演示我所追求的内容。一是完整的零件编号。
Part Number Priority
278700-002 44
278700-003 40
278900-001 80
324100-001 20
第二个列表有一组零件号规则,但此列表可能只包含前缀:
Part Prefix Priority Delta
278700 1
278700-002 1
3 -5
8000 2
我希望找到一个 LINQ 表达式,使我能够找到给定部分的所有规则。例如,这意味着 278700-002
将同时匹配 278700-002
规则和 278700
规则。
我已经能够以一种看似笨拙的方法来做到这一点,但我很感兴趣是否可以使用 LINQ 单行代码来做到这一点。
以下是每个对象的概念示例:
public class Rule
{
public string PartPrefix;
public int PriorityBump;
}
public class Part
{
public string PartNumber;
public int Priority;
}
以及方法中用于实现规则的代码。为了简单起见,我只是增加优先级值,但实际上我想要 List.FindAll() 中的 lamda,它返回每个零件号的匹配规则列表。
List<Part> parts;
List<Rule> rules;
public static void RePrioritize()
{
foreach (Part p in parts)
{
foreach (Rule r in rules)
{
if (r.PartPrefix.Equals(p.PartNumber.Substring(0,
r.PartPrefix.Length)))
p.Priority += r.PriorityBump;
}
}
}
我正在寻找这样的 LINQ 函数,而不是 foreach (Rule r
):
rules.FindAll(x => x.PartPrefix.IsContainedIn(p.PartNumber));
最佳答案
rules.Where(x => p.PartNumber.StartsWith(x.PartPrefix)); 怎么样?
我没有提供更大的 LINQ,因为您指定仅替换内部 foreach (foreach (Rule r
),而不是外部 foreach。
关于c# - LINQ 匹配另一个列表中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640150/