与 LINQ/C# 的部分字符串匹配

本文关键字:字符 字符串 串匹配 LINQ | 更新日期: 2023-09-27 18:36:53

这似乎应该很简单,但我不知道如何让它工作。 想象一下以下模型:

public class ModelA
{
    public string Code {get;set;}
}
public class ModelB
{
    public string Code {get;set;}
}

我正在从数据库中读取一组 ModelA,我还需要根据代码抓取 ModelB。 踢球者是我只需要匹配代码的一部分。

例如,模型A的代码可能是"1234.00

",模型B的代码可能是"001234.20" - 我想根据包含1234部分的两个代码链接两个模型。 我希望它是一个连接,但我看不出这怎么可能,所以遍历第一个数据集并匹配它们也很好,但我仍然无法做到这一点。

我创建了一个名为 TruncateCode 的字符串扩展方法,它将为我提供我想要的部分,但 LINQ 似乎不支持在比较或联接中调用扩展(引发异常,抱怨该方法无法识别且无法使用)。这基本上是我正在尝试的:

var query = a in db.ModelASet
    (where clause)
    select a;
foreach(ModelA item in query)
{
    var query2 = b in db.ModelBSet
       where b.Code.TruncatedCode() == item.Code.TruncatedCode()   // this doesn't work :(
       select b;
}

亲爱的读者,你会怎么做?

(INB4"为什么你的数据是这样布局的?"- 这是一个10多年前的遗留数据库,伙计,我只是想让它工作。

与 LINQ/C# 的部分字符串匹配

您需要使用

ToList() 或类似的东西来具体化结果才能使用扩展方法。

var list = (a in db.ModelASet
    select a).ToList();
foreach(var item in list)
{
    var query2 = b in list
       where b.Code.TruncatedCode() == item.Code.TruncatedCode()   // this doesn't work :(
       select b;
}