如何使用 LINQ 仅从实体加载最后一条记录?

Posted

技术标签:

【中文标题】如何使用 LINQ 仅从实体加载最后一条记录?【英文标题】:How to load just the last record from entity with LINQ? 【发布时间】:2013-10-07 22:28:09 【问题描述】:

我想从最后一条记录中获取名为“Gram”的字段的值并将其值放入变量中,而不使用任何条件。

第一次尝试

int value = int.Parse(Entity.TblGold.LastOrDefault().Gram.ToString());

我第二次尝试

int value = int.Parse(Entity.TblGold.Select(p => p.Gram).Last().ToString());

我刚刚收到这个异常:

LINQ to Entities does not recognize the method 'DataModel.TblGold LastOrDefault[TblGold](System.Linq.IQueryable``1[DataModel.TblGold])' method, and this method cannot be translated into a store expression.

【问题讨论】:

旁注:数据库中通常没有“最后一个”记录的概念......只有“最后一个,按字段排序时”。 应该有一个解决方案。我在我的实体中有我的表。例如 200 条记录......我想要一个来自 LAST 记录的特殊字段的值。没有条件。所以怎么能我从字段中获取这个值?????? :( 你能给我推荐代码吗,很抱歉打扰你的时间 【参考方案1】:

如果你有一个增量 id:

int idx = tb.Max(i => i.Id);
var row = tb.FirstOrDefault(i => i.Id == idx);

【讨论】:

【参考方案2】:

您可以使用 order by 1 == 1 并且它有效

var countOfRows = tbl.Count();    
var lastRow = tbl.OrderBy(c => 1 == 1).Skip(countOfRows - 1).FirstOrDefault();

【讨论】:

【参考方案3】:

LastLastOrDefault 在 LINQ to Entities 中不受支持。您可以使用ToListToArray 迭代您的查询,然后应用Last,或者您可以按降序排序,然后使用First,例如:

int value = int.Parse(Entity.TblGold
                            .OrderByDescending(p => p.Gram)
                            .Select(r => r.Gram)
                            .First().ToString());

【讨论】:

非常感谢。非常有用:) @amin,不客气,今天看到你加入了,欢迎来到 ***。 你真好 :) 非常感谢。所以我想通了,我们应该有某种实例来做最后或第一个或像这些? @amin,不是真的,因为首先,它被翻译成SELECT Top (1) 所以你实际上不必迭代查询。上面的回答中的查询被翻译成类似 SELECT TOP 1 Gram from tblGold Order by Gram DESC; 的东西。使用Last/LastOrDefault,表达式无法转换为底层数据源语言 (SQL)。 @amin,对不起,我错过了选择特定字段的部分。只需检查更新的答案【参考方案4】:

你不能在一个查询中完成,但你可以在两个查询中完成。

var countOfRows = tbl.Count();

var lastRow = tbl.Skip(countOfRows - 1).FirstOrDefault();

【讨论】:

您的代码无法编译,因为没有存储或使用 orderby 的错误关闭

以上是关于如何使用 LINQ 仅从实体加载最后一条记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Core Data 数据库的最后一条记录?

通过 linq 对实体查询进行分组,以通过加入表来获取具有最新时间戳的一条记录

如何确保仅从特定表中选择第一条记录,该表可以在 DB2 中包含多个相同 ID 的记录

在 EFCore 急切加载 LINQ 查询中,如何在 ThenInclude() 表达式中引用***实体?

如何在 Datatables 中加载表并让它在加载时自动滚动到最后一条记录

如何仅从多对多映射表加载 id?