c# - 使用 LINQ/C# 进行部分字符串匹配

标签 c# linq

这看起来应该很简单,但我不知道如何让它发挥作用。想象以下模型:

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

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

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

例如,ModelA 的代码可能是“1234.00”,而 ModelB 的代码可能是“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 多年前的遗留数据库,伙计,我只是想让它发挥作用。)

最佳答案

您需要使用 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;
}

关于c# - 使用 LINQ/C# 进行部分字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600749/

相关文章:

c# - 将 DateTime.Add(TimeSpan) 与 LINQ 结合使用

c# - .NET Compact Framework - 没有 ShowDialog 的模态表单

C# Winform PrintDialog 弹出页面

c# - 将 foreach 循环转换为 linq

asp.net-mvc - LINQ to SQL 表依赖关系

c# - 是否有通过选择所需区域从文本中创建正则表达式的应用程序?

c# - 如何拆分或加入 "or"上的 linq 查询(不使用 Union)?

c# - 使用 LINQ 对列表的所有元素应用谓词

xml - 如何解析多个不唯一的 XML 元素

c# - 如何在 Lua 中注册 C# 类构造函数