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

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

这样做很好:

from s in Something join a in AnotherThing on s.NullableDateTime.Value equals a.DateTime select s 

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

 from s in Something join a in AnotherThing on new { s.NullableDateTime.Value } equals new { a.DateTime } select s 

结果是

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

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

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

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

  on new { s.NullableDateTime.Value } equals new { Value = a.DateTime } 

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

 class A { public DateTime Value { get; set; } } 

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

 class B { public DateTime DateTime { get; set; } } 

因此,编译器无法理解,您想要将a.Valueb.DateTime进行比较。