我有一个linq查询的结果,它是两个SQL表之间的连接
var result1 = db.TABLE1.Join(
db.TABLE2,
p1 => p1.ID,
p2 => p2.ID,
(p1, p2) => new
{
Id = p1.ID,
Date = p2.DATE,
Prop1 = p1.Prop1,
Prop2 = p2.Prop2,
Prop3 = p2.Prop3,
Prop4 = p2.Prop4
});
然后我尝试按Id对结果进行分组,并选择具有每个Id的最新日期的行
var result2 = result1.GroupBy(p => p.Id)
.Select(q => q.OrderBy(p => p.Date).LastOrDefault())
.ToList();
但这失败了
LINQ to Entities无法识别方法'<> f__AnonymousTypee'6 [System.Decimal,System.Double,System.Nullable'1 [System.Decimal],System.Nullable'1 [System.Decimal], System.String,System.String] LastOrDefault<> f__AnonymousTypee'6'方法,此方法无法转换为商店表达式。“错误。
任何人都可以帮我弄清楚我做错了吗?
答案 0 :(得分:2)
您无法在LINQ中使用Last
/ LastOrDefault
实体查询,因为在铺设数据源语言(SQL)时没有可用的转换。而是按降序对记录进行排序,然后获得第一个或默认值:
q.OrderByDescending(p => p.Date).FirstOrDefault()