我想加入两张桌子。两个表的连接列为column3,column4。
Visual Studio抛出以下错误:
方法的类型参数
' System.Linq.Enumerable.Join (System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable,System.Func, System.Func,System.Func)'
无法从使用中推断出来。尝试明确指定类型参数。
我的代码如下:
int i = context.Table1.Where(u => u.column1 == true).Join(
context.Table2.Where(u => u.column2.ToUpper() == "COMPLETED"),
q => new { Column3 = q.column3, Column4 = q.column4 },
u => new { Column3 = u.column3, Column4 = u.column4 },
(q, u) => new { q.column1 }).Count();
此查询有什么问题?
提前致谢。
答案 0 :(得分:2)
查询本身似乎很好,但我们不知道context.TableX
的完整类型。
对于Join to compile,new { Column3 = q.column3, Column4 = q.column4 }
部分定义的两个匿名类型都需要具有相同的属性类型,因此生成的匿名类型是相同的。 Table1
和Table2
的条目是否具有相同的类型,或者它们的列类型不匹配?
在我的机器上,
行l1.Join(l2,
d => new { P = d.Column1, Q = d.Column2 },
d => new { P = d.Column1, Q = d.Column2 },
(d, u) => new { d.Column1 }).Count();
编译正常,l1
和l2
类型List<Dummy>
和Dummy
只有两个整数属性。
答案 1 :(得分:1)
我已经遇到过几次了,解决方法是将每一列都强制转换为正确的类型:
int i = context.Table1.Where(u => u.column1 == true).Join(
context.Table2.Where(u => u.column2.ToUpper() == "COMPLETED"),
q => new { Column3 = (string)q.column3, Column4 = (decimal?)q.column4 },
u => new { Column3 = (string)u.column3, Column4 = (decimal?)u.column4 },
(q, u) => new { q.column1 }).Count();