与 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多年前的遗留数据库,伙计,我只是想让它工作。
您需要使用
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;
}