Requête Linq pour obtenir le dernier enregistrement
Je sais que cela est demandé de nombreuses fois et j'ai cherché la plupart des solutions en ligne, mais rien ne semble le faire pour moi. J'ai une table avec cette structure:
ID | ScheduleId | Filename | Description
1 | 10 | | ....
2 | 10 | test.txt | .....
Je veux obtenir le dernier non-vide Filename
en passant par le ScheduleId(par exemple, pour obtenir "test.txt" dans ce cas).
J'ai essayé beaucoup de choses et rien ne semble obtenez-moi le nom de fichier. Voici le dernier:
var tempFileName = objContext.SchedulesAndFiles
.Where(x => x.ScheduleId == scheduleId)
.OrderByDescending(x => x.ScheduleId)
.Take(1).Select(x => x.Filename);
Cela ne fonctionne pas aussi bien, même si je comprends pourquoi il n'a pas d':
var tempFileName = from e in objContext.SchedulesAndFiles
where e.ScheduleId == scheduleId
orderby e.ScheduleId descending
select e.Filename;
Appel .Last()
ou .LastOrDefault()
déclenche une exception(The query operator 'LastOrDefault' is not supported.
)
- Dans votre premier exemple, vous
OrderByDescending
surScheduleId
. Ne pas vous direID
? Aussi, où voulez-vous de filtre videFileName
dossiers? - Vous avez juste à utiliser
tempFileName.First
puisque vous êtes déjà à l'aide dedescending
. - La première() doit être pris en charge et vous pouvez l'utiliser avec OrderByDescending
- Vous êtes de la commande par
ScheduleId
mais votre échantillon contient deux enregistrements avec le mêmeScheduleId
. Alors, évidemment, vous devez inclure une autre colonne que vous souhaitez commander, par exemple l'ID:... orderby e.ScheduleId descending, ID descending
- Oui, vous avez raison, j'ai déjà accepté Selman22 réponse, comme il l'a suggéré. Il semble me faire exactement le résultat que j'attends
Vous devez vous connecter pour publier un commentaire.
si inclure que vous voulez que seuls les non-vide les noms de fichiers. Vous pouvez également utiliser
ToList()
pour finaliser la requête, puisFirstOrDefault()
devrait fonctionner comme prévu, essayez deVous devez trier vos enregistrements sur le
ID
au lieu deScheduleId
et également filtrer les enregistrements qui a le videFilename
:Vous pouvez essayer cette requête. Je pense que vous avez à émettre le dernier ou le défaut avant de sélectionner le nom de fichier
Une option est d'appeler ToList() ou AsEnumerable() avant d'essayer d'utiliser LastOrDefault().
La dernière tentative:
Pour chaque article avec cette scheduleId, cela devient l'ensemble de tous les articles qui ont un non-vide de nom de fichier, triés par ID décroissant (en supposant que plus les Id sont insérés après le premier IDs), l'obtention de la Première() (qui devrait être pris en charge) et obtient son nom de fichier.
Notez que vous pouvez exécuter dans un
NullPointerException
surFirst()
si il n'y a pas de satisfaire à un nom de fichier.Aussi, vous pouvez avoir besoin de normaliser/garniture de ne pas trouver des espaces/tabulations et de telles choses.