web-dev-qa-db-fra.com

Comment charger uniquement le dernier enregistrement d'une entité avec LINQ?

Je veux extraire la valeur du champ nommé "Gram" du dernier enregistrement et la mettre dans une variable, sans utiliser aucune condition.

J'ai d'abord essayé

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

Deuxièmement, j'ai essayé

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

Je viens de recevoir cette exception:

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.

13
amin

Last ou LastOrDefault ne sont pas pris en charge dans LINQ to Entities. Vous pouvez soit réitérer votre requête en utilisant ToList ou ToArray, puis appliquer Last, ou vous pouvez commander par ordre décroissant, puis utiliser First comme

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

Si la liste est correctement commandée pour saisir le dernier élément, je l'inverse simplement, puis je récupère le premier (précédemment dernier) élément:

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

Vous ne pouvez pas le faire en une seule requête, mais vous pouvez le faire en deux.

var countOfRows = tbl.Count();

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