Questa query sembra essere corretta dal punto di vista del risultato ottenuto.
Ma nella vostra query interna tis.Where(p => p.PlanProgress != null && p.PlanProgress > 0).Max(w => w.EndDate)
viene calcolato per ogni elemento della collezione con t.PlanProgress > 0
Quindi è un modo migliore per ottenere il valore massimo al di fuori di una query come segue:
var max = tis.Where(p => p.PlanProgress != null && p.PlanProgress > 0).Max(w => w.EndDate);
tis.First(t => t.PlanProgress > 0 && t.EndDate == max);
Andando oltre p. PlanProgress! = Null è sempre vero poiché p.PlanProgress non è di tipo Nullable. Così il nostro codice diventa in questo modo:
var max = tis.Where(p => p.PlanProgress > 0).Max(w => w.EndDate);
tis.First(t => t.PlanProgress > 0 && t.EndDate == max);
Oppure si può cambiare la definizione della classe e fare p.PlanProgress di tipo Nullable:
public class TaskWeekUI {
public Guid TaskWeekId { get; set; }
public Guid TaskId { get; set; }
public Guid WeekId { get; set; }
public DateTime EndDate { get; set; }
public string PersianEndDate { get; set; }
public double? PlanProgress { get; set; }
public double ActualProgress { get; set; }
}
var max = tis.Where(p => p.PlanProgress.HasValue && p.PlanProgress.Value > 0).Max(w => w.EndDate);
tis.First(t => t.PlanProgress.HasValue && t.PlanProgress.Value > 0 && t.EndDate == max);
scusami, ho modificato e aggiunto query, l'ho dimenticato. – Shayan
'p => p.PlanProgress! = Null' non è richiesto nella clausola' Where' – fearofawhackplanet
Tnx, ma posso scrivere una query per max in condizione where? – Shayan