c# - LINQ 匹配另一个列表中的子字符串

标签 c# linq

我想将一个项目列表与另一个列表进行匹配,其中考虑部分匹配。

考虑这两个列表,它们经过简化以演示我所追求的内容。一是完整的零件编号。

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/

相关文章:

c# - 从网站读取信息c#

c# - 在 LINQ 中解构包含 ValueTuple 的容器

c# - Entity Framework 和 Oracle,Linq where 子句字符串比较在给定函数参数而不是文字时不返回任何记录

c# - 如何检查对象列表是否包含具有指定属性的对象

c# - 在 C# 中序列化和反序列化 Oracle.DataAccess.OracleException

c# - 对列表中实体列表的 LINQ 查询

c# - Xamarin:libmonosgen-2.0.dylib:MCNearbyServiceAdvertiser 上缺少所需的代码签名

c# - C# EnvDTE 将项目从解决方案移动到解决方案文件夹

c# - 当每个项目都包含对其父项的引用时,从项目列表创建树

c# - Entity Framework - 如何将复杂对象添加到数据库