使用匿名类型时,在"加入"调用中类型推断失败

dav*_*v_i 5 c# linq linq-to-sql

我对LINQ to SQL有一个特殊的问题:

这样做很好:

from s in Something
join a in AnotherThing
on s.NullableDateTime.Value
equals a.DateTime
select s
Run Code Online (Sandbox Code Playgroud)

但是,使用匿名类型如下:

from s in Something
join a in AnotherThing
on new { s.NullableDateTime.Value }
equals new { a.DateTime }
select s
Run Code Online (Sandbox Code Playgroud)

结果是

join子句中某个表达式的类型不正确.调用"加入"时类型推断失败.

我需要使用匿名类型,因为我的目标是添加另一列来加入.

有关为什么会发生这种情况以及如何解决的任何想法?

Den*_*nis 12

您应该告诉编译器它必须比较哪些属性:

 on new { s.NullableDateTime.Value }
 equals new { Value = a.DateTime }
Run Code Online (Sandbox Code Playgroud)

第一个创建一个匿名类型,如下所示:

class A
{
    public DateTime Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

示例中的第二行创建另一个匿名类型:

class B
{
    public DateTime DateTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

因此,编译器无法理解,要比较a.Valueb.DateTime.