2013-10-25 167 views
2

这似乎应该是直截了当的,但我无法弄清楚如何使其工作。想象一下以下型号:与LINQ/C部分字符串匹配#

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

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

我读了一组MODELA的从数据库中,我也需要根据代码获取ModelB。踢球者是我只需要匹配部分代码。

例如,ModelA的代码可能是“1234.00”,ModelB的代码可能是“0.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多年前的人旧的数据库,我只是试图让这个工作。)

+0

这可能是相关的:http://social.msdn.microsoft.com/Forums/en-US/a939efa2-525c-4cc4-ae82-092b637c5d50/newblie-linq-question-intersecting-to-lists在部分匹配 – NoChance

回答

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; 
} 
+0

您的答案,就像它在列表中找到列表中的元素一样。 –