12
votes

Linq- max dans la condition

J'ai une classe Taskwekui avec cette définition: xxx

et j'ai écrit cette requête: xxx

est la vraie? Puis-je écrire ma requête mieux que cela?


5 commentaires

Excusez-moi, j'ai édité et ajouter une requête, je l'ai oubliée.


p => p.planprogress! = null n'est pas requis dans votre clause


TNX, mais puis-je écrire une requête pour max dans la condition?


Voir: Stackoverflow.com/questions/1101841/...


en double possible de Comment utiliser LINQ pour sélectionner un objet avec une valeur de propriété minimale ou maximale


4 Réponses :


4
votes

Cette requête semble être correcte du point de vue du résultat obtenu.

mais dans votre requête interne titis.where (p => p.planprogress! = null && p.planprogress> 0) .max (w => w.enddate) est calculé pour chaque élément de la collection avec t.planprogress> 0

donc c'est un meilleur moyen d'obtenir une meilleure valeur en dehors de Une requête comme suit: xxx

aller supplémentaire p.planprogress! = null est toujours vrai car p.planprogress n'est pas de type nullable. Donc, notre code devient comme ceci: xxx

ou vous pouvez modifier une définition de votre classe et faire p.planprogress de type nullable: xxx


2 commentaires

+1, la seule chose que je changerais est le premier à un selfeordefault sauf s'il ne peut garantir qu'il y aura toujours un élément avec planprogress> 0


+1, mais je pense que "Collection.max" jette une exception si "collection" est vide, il faut donc probablement être un chèque supplémentaire avant de définir "max". La collection sera vide si tout planprogress <= 0. Comme il y a des chèques pour planprogressage> 0 i assumez planprogression <= 0 est légal et une exception probablement ne serait probablement pas attendue.



-1
votes

Vous n'avez pas besoin de comparer planprogress avec NULL car Double est le type de structure, il ne peut pas être null.

Si vous voulez TaskWekui avec Max Enddate et Plan de plan positif, vous pouvez essayer ce code: P>

TaskWeekUI ti = tis.Where(t => t.PlanProgress > 0).Max(w => w.EndDate);


2 commentaires

Ça finira par attribuer une attribution DateTime à TaskWeekui


Ne peut pas convertir implicitement le type 'system.datetime' à "Taskwekui"



37
votes

Je pense que vous voulez que celui dont le planprogress> 0 a un dernier enddate . xxx


4 commentaires

+1, belle solution claire sans aucune exception étrangère introduite en utilisant max.


TNX, je pense que c'est une meilleure solution simple.


N'est-ce pas une perte de temps pour trier toute la liste juste pour obtenir l'élément avec le plus haut enddate ? Ce semble être une meilleure solution.


@Juanluissoldi: Vous êtes correct. La meilleure solution devrait être O (n). Mais de toute façon, il est acceptable et c'est la meilleure base de solution sur les fonctions de LINQ intégrées.



0
votes
     var max_Query =
                   (from s in db.Songs
                    join bk in db.Albums on s.BookId equals addAlbumDetailsViewModel.BookId
                    select s.SongId).Max();
                            max_Query++;

0 commentaires