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

时间:2013-10-02 10:17:12

标签: 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

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

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

结果

  

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

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

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

1 个答案:

答案 0 :(得分:12)

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

 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进行比较。