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 odpowiedzi
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.
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.
Podobne pytania
Nowe pytania
linq
Language Integrated Query (LINQ) jest składnikiem Microsoft .NET Framework, który dodaje natywne możliwości wykonywania zapytań danych do języków .NET. W razie potrzeby rozważ użycie bardziej szczegółowych tagów, na przykład [linq-to-sql], [linq-to-entity] / [entity-framework] lub [plinq]