我有一个包含多个字段的表,每个字段都通过单独的 ViewModel 单独更新,现在我想获取特定字段的最新值(也许它已在我表的第五条记录中更新),好吗?现在我写的看起来像这样:
public ViewResult ShowPiece()
{
var context = new SiteContext();
var showPiece = context.Portraits.LastOrDefault();
return View(showPiece);
}
但是当我运行应用程序并导航到上面的操作时,我收到此错误:
LINQ to Entities 无法识别该方法,并且该方法无法转换为存储表达式...
那有什么问题吗?
使用降序排序(按日期或 ID)并且FirstOrDefault
这是支持的 http://msdn.microsoft.com/en-us/library/bb738550.aspx:
var showPiece = context.Portraits
.OrderByDescending(p => p.Date)
.FirstOrDefault();
另一种选择是通过子查询选择具有最大日期(id)的肖像(正如 Evelie 在评论中建议的那样):
var showPiece = context.Portraits
.FirstOrDefault(p => p.Date == context.Portraits.Max(x => x.Date));
我在这里做了一个小小的调查。在第一种情况(排序)中,生成以下查询:
SELECT TOP (1) [t0].*
FROM [Portraits] AS [t0]
ORDER BY [t0].[Date] DESC
在第二种情况下(获取最大值):
SELECT TOP (1) [t0].*
FROM [Portraits] AS [t0]
WHERE [t0].[Date] = ((
SELECT MAX([t1].[Date])
FROM [Portraits] AS [t1]
))
执行计划几乎相同,但在第二种情况下,Top 执行了两次。因此,与索引扫描相比,Top 的成本为 0%,这应该不是问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)