web-dev-qa-db-ja.com

エンティティから最後のレコードだけをLINQでロードする方法は?

「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.

15
amin

LastまたはLastOrDefaultは、LINQ to Entitiesではサポートされていません。 ToListまたはToArrayを使用してクエリを反復してからLastを適用するか、降順で並べ替えてFirstを使用することができます。

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

リストが最後のアイテムを取得するように正しく順序付けられている場合、リストを逆にして、最初の(以前は最後の)アイテムを取得します。

var gram = int.Parse(Entity.TblGold.Reverse().First().Gram.ToString());
0
Bern

1つのクエリでは実行できませんが、2つのクエリで実行できます。

var countOfRows = tbl.Count();

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