Jeśli mam kilka takich klas;

    public class Employee
    {
         public string Name { get; set; }
         public string Address { get; set; }
         public double Salary { get; set; }
         public List<Salary> PastSalaries { get; set; }
    }

    public class Salary
    {
        public double Amount { get; set; }
    }

Mogę uzyskać listę pracowników, którzy w przeszłości mieli pensję mniejszą niż określona kwota; np

var employees = employeeList.Where(o => o.PastSalaries.Any(p => p.Amount < 35000)); 

To działa dobrze, ale jeśli moja poprzednia kolekcja wynagrodzeń nie była zbiorem klas wynagrodzeń, ale raczej zbiorem podwójnych. np

public class Employee
{
    public string Name { get; set; }
    public string Address { get; set; }
    public double Salary { get; set; }
    **public List<double> PastSalaries { get; set; }**
}

To jak mogę zrobić to samo zapytanie co poprzednio?

var employees = employeeList.Where(o => o.PastSalaries.Any(???? < 35000)); 

Z czym mam zrobić moje porównanie?

Dzięki,

2
Mark D 17 luty 2012, 15:30

2 odpowiedzi

Najlepsza odpowiedź
var employees = employeeList.Where(o => o.PastSalaries.Any(p => p < 35000));

Parametr delegata jest teraz typem double, a nie typem Salary z właściwością Amount, dzięki czemu można bezpośrednio porównać parametr.

2
devdigital 17 luty 2012, 15:33
var employees = employeeList.Where(o => o.PastSalaries.Any(p=>p < 35000)); 

Spróbuj tego. W pierwszym przypadku Twój typ to Salary i zaznaczasz pole Amount tego typu. W tym przypadku chcesz sprawdzić wartość double, więc p<35000 będzie działać poprawnie.

1
Chuck Norris 17 luty 2012, 15:34