Этот запрос представляется правильным с точки зрения полученного результата.
Но в вашем внутреннем запросе tis.Where(p => p.PlanProgress != null && p.PlanProgress > 0).Max(w => w.EndDate)
вычисляется для каждого элемента в коллекции с t.PlanProgress > 0
Так что лучший способ получить максимальное значение вне запроса следующим образом:
var max = tis.Where(p => p.PlanProgress != null && p.PlanProgress > 0).Max(w => w.EndDate);
tis.First( t => t.PlanProgress > 0 && t.EndDate == max);
Идем дальше p.PlanProgress! = Null всегда верно, поскольку p.PlanProgress не имеет типа Nullable Таким образом, наш код выглядит так:
var max = tis.Where(p => p.PlanProgress > 0).Max(w => w.EndDate);
tis.First( t => t.PlanProgress > 0 && t.EndDate == max);
Или вы можете изменить определение вашего класса и сделать p.PlanProgress типа 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);