我遇到了一种情况,我需要基于两列连接两个表,其中要比较的一列是可为空的整数,而一列是字符串(我知道这是一团糟)。在 SQL 中,以下工作:
SELECT stuff
FROM Table1 t1
Inner Join Table2 t2 on t1.ID = t2.ID and t2.Weird = CAST(t1.Weird AS varchar(11))
现在为了加入 LINQ 中的多个列,我知道我必须执行以下操作:
var queryResult = (from o in T1)
join p in t2 on new { T1.ID, T1.Weird} equals new {T2.ID, T2.Weird}
问题是我自然会收到“类型推断失败”错误。有道理,Column Weird 是一个表中的字符串和另一个表中的 int。
现在通常只有一列,这将是一个简单的修复,只需执行 ToString() 甚至 SqlFunctions.StringConvert 整数字段,如下所示:
var queryResult = (from o in T1)
join p in t2 on T1.ID equals SqlFunctions.Convert(T2.ID)
这工作得很好。但是,当我尝试结合这两种方法时,我得到一个“无效的匿名类型成员声明符”,其中包含以下内容:
var queryResult = (from o in T1)
join p in t2 on new { T1.ID, T1.Weird} equals new {T2.ID, SqlFunctions.Convert( T2.Weird)}
经过一些研究,我发现我需要命名这些值,所以我尝试了以下方法:
var queryResult = (from o in T1)
join p in t2 on new {ID = T1.ID, Weird = T1.Weird} equals new {ID = T2.ID, Weird = SqlFunctions.Convert(T2.Weird)}
这告诉我对 SqlFunctions 函数的调用不明确。我有点想不通,我想当答案就在我面前时,我可能会走得很远。知道如何在 LINQ 中使这个相当基本的 SQL 语句工作吗?