PDA

View Full Version : سوال: انتخاب ماکزیمم از لیست تو در تو



دلتنگ اسمان
شنبه 21 اردیبهشت 1398, 18:47 عصر
با سلام
لیستی به صورت زیر داریم

List<List<Personel>> ListInDayes = new List<List<Personel>>();
کلاس Personel :

class personel
{
public int day = 0;

public double average = 0;
}
میخوام ماکزیمم average رو در روز خاص مثل day =25 پیدا کنم.
ممنون میشم برای قطعه کدش راهنمایی کنید.

محمد آشتیانی
یک شنبه 22 اردیبهشت 1398, 09:00 صبح
سلام
var maximum = ListInDayes.Max(c => c.Where(p => p.Day == 25).Max(p => p.Average));

دلتنگ اسمان
یک شنبه 22 اردیبهشت 1398, 12:32 عصر
سلام
var maximum = ListInDayes.Max(c => c.Where(p => p.Day == 25).Max(p => p.Average));

ممنون جناب آشتیانی .ولی خطا داد :

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Core.dll

Additional information: Sequence contains no elements

خودم به این شکل نوشتم (راستش میخواستم با لامبدا بصورت خطی بنویسم.) :


private static double GetMaxAverage(List<List<Personel>> ListLstInDayes, int day)
{
double max = 0;

var l = from a in ListLstInDayes
from k in a
where k.day == day
select k;

foreach (Personel item in l)

if (item.Average > max) max = item.Average;


return max;
}

محمد آشتیانی
یک شنبه 22 اردیبهشت 1398, 13:17 عصر
سلام مجدد
به خاطر اینه که یکی از لیست های داخلی شما ، هیچ آیتمی نداره ، به اینصورت اصلاح کنید

var maximum= ListInDays.Where(c => c.Any()).Max(c => c.Where(p => p.Day == 25).Select(p => p.Average).Max());

ضمن اینکه چک کنید لیست اصلیتون هم دارای آیتم باشه ، مثلا

if (ListInDays.Any())
{
var maximum= ListInDays.Where(c => c.Any()).Max(c => c.Where(p => p.Day == 25).Select(p => p.Average).Max());
}



* اصلاح برای اعداد منفی

دلتنگ اسمان
یک شنبه 22 اردیبهشت 1398, 13:34 عصر
جناب آشتیانی احسنت و ممنون