我有一个SQL查询,我试图使用Lambda表达式转换为Linq。 我能够在TABLE1.XR_ID和TABLE2.ID上进行正常的连接操作,但后来我意识到SQL查询正在加入CHARINDEX。我做了一些研究,但我无法找到任何资源引导我朝正确的方向发展。
SQL:
SELECT distinct a.XR_ID FROM
TABLE1 a
JOIN TABLE2 b ON CHARINDEX(CONVERT(VARCHAR(20), a.XR_ID), CONVERT(VARCHAR(20), B.ID), 1) = 1
WHERE
b.TYPE = 'Q'
LINQ:
var innerQuery =
context.TABLE1.
Join(context.TABLE2,
table1 => table1.XR_ID,
table2=> table2.ID,
(table1 , table2) =>
new
{
TABLE1 = table1 ,
TABLE2 = table2
})
.Where( y=> y.table2.TYPE == "Q")
.Distinct()
.ToList();
上面的查询没有给我与sql查询相同的结果。任何人都可以指出我正确的方向吗?
答案 0 :(得分:1)
您可以使用SqlFunctions
Class CHARINDEX
方法生成CharIndex
,但我认为您无法在LINQ中执行something = 1
加入条件。
我认为您应该进行交叉连接并将条件移至where
子句。这就是为什么我会从以下开始:
var innerQuery = from t1 in context.Table1
from t2 in context.Table2
where SqlFunctions.CharIndex(
SqlFunctions.StringConvert((double)table1.XR_ID),
SqlFunctions.StringConvert((double)table2.ID)) == 1
&& t2.Type == "Q"
select new { Table1 = t1, Table2 = t2 }