我有一个包含"abc|efg|xyz"
的t.arg
和b.arg,即"xyz"
我想在加入时比较它们:
join t in db.Tdb on b.arg.Substring(b.arg.LastIndexOf('|') + 1) equals t.arg
我遇到以下错误:
LINQ to Entities无法识别方法'Int32 LastIndexOf(Char)' 方法,并且该方法无法转换为商店表达式。'
两个参数都是字符串
该怎么办才能解决这个问题?
答案 0 :(得分:1)
这意味着LastIndexOf方法没有内置的Linq-> T-SQL转换。 AFAIK,SQL Server中也没有直接对应的功能。您将必须:
答案 1 :(得分:0)
基本上,您正在尝试编写等效于SQL bArg = tArg OR bArg LIKE '%|' + tArg
的代码。我相信.EndsWith
应该为您实现这一目标。不幸的是,无法在join
部分中使用它,但可以在where
部分中使用它。
var result =
from b in collection1
from t in collection2
where b.arg == t.arg || b.arg.EndsWith("|" + t.arg)
select new { B = b, T = t };
此处的where
子句应大致等同于您的SQL查询。
由于您没有看到a == b || EndsWith
的相关性,请考虑以下示例以了解其工作原理:
abc|def|ghi
加入ghi
ghi
加入ghi
如果我们使用您的方法,则将从您的Substring
中获得以下结果:
abc|def|ghi
成为ghi
ghi
,因为它不包含|
的索引为-1,而索引号为+ 1使其为0,因此它简单地变成了ghi
现在,如果我们使用==
和EndsWith
会发生什么?
"abc|def|ghi"
不是== "ghi"
,但它以"|ghi"
结尾,因此满足条件。"ghi"
做== "ghi"
,因此它满足条件。