lambda表达式中具有多个连接条件的两个表



我想连接两个表。两个表的连接列分别为第3列和第4列。

Visual Studio正在引发以下错误:

方法的类型参数

’系统。林克。可枚举。参加(System.Collections.Generic.IEnumerable,系统集合。通用的IEnumerable,系统。Func,系统Func,系统。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();

这个查询有什么问题?

提前谢谢。

查询本身看起来不错,但我们不知道context.TableX的完整类型。

对于要编译的Join,new { Column3 = q.column3, Column4 = q.column4 }部分定义的两个匿名类型需要具有相同的属性类型,以便生成的匿名类型相同。Table1Table2的条目是否具有相同的类型,或者可能是它们的列类型不匹配?

在我的机器上,线

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();

编译良好,l1l2都属于类型List<Dummy>Dummy,仅具有两个整数属性。

我曾多次遇到这种情况,解决方案只是将每列强制转换为正确的类型:

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();

相关内容

  • 没有找到相关文章

最新更新