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

时间:2013-10-25 23:08:43

标签: c# linq

这似乎应该是直截了当的,但我无法弄清楚如何让它发挥作用。想象一下以下模型:

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

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

我正在从数据库中读取一组ModelA,我还需要根据代码获取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多年前的遗留数据库man,我只是想让它发挥作用。)

1 个答案:

答案 0 :(得分:1)

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