LINQ to Entities仅支持转换EDM原语或枚举类型错误

时间:2015-04-30 18:15:57

标签: c# linq entity-framework linq-to-entities

在SO上可能存在数十个重复标题的问题,如果这是重复的话,我很抱歉,但我对LINQ的经验有限,我无法找到解决方案。我正在尝试检索最后一条消息,FirstName和lastname,以及最后一条消息的发送日期,按identNumber分组。 SQL查询工作正常,LINQ返回:

Unable to cast the type 'System.Nullable`1' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types

显然有些东西是空的,但我不确定正确的翻译是什么。

SQL:

SELECT     e.identNumber, e.DateSent, e.FirstName, e.LastName
FROM         Echo.vw_EchoChatMessages AS e,
  (SELECT MAX(DateSent) AS MaxDate, identNumber
  FROM Echo.vw_EchoChatMessages
  GROUP BY identNumber ) MaxResults
WHERE e.identNumber = MaxResults.identNumber
AND e.DateSent = MaxResults.MaxDate

LINQ(我能得到最接近的):

                var qry = from c in db.vw_EchoChatMessages
                      let maxDate = (from d in db.vw_EchoChatMessages select d.DateSent).Max()
                      where c.DateSent.Equals(maxDate)
                      select new { c.FirstName, c.LastName, c.DateSent };

请尽可能地告知我们!

1 个答案:

答案 0 :(得分:3)

EF无法识别从Nullable<T>object的隐式转换,编译器会为.Equals()调用生成该转换。

将其更改为==运算符,您应该没问题,因为规范定义了TNullable<T>之间的相等运算符。