Mam listę obiektów pracowniczych. Muszę wybrać tylko dwa obiekty pracownicze między dwoma indeksami (na podstawie zmiennych początkowych i końcowych). Poniższy kod działa dobrze, ale nie jest w LINQ. Jaki jest najlepszy kod LINQ
do tego celu?Sposób LINQ do pobierania elementów między dwoma indeksami na liście
Uwaga: szukam Method Chain
podejścia
CODE
public static class DatabaseSimulator
{
public static List<Employee> GetData(string name, int index, int pageSize)
{
List<Employee> searchResult = new List<Employee>();
List<Employee> employeesSource = SearchEmployees(name);
int start = ((index - 1) * pageSize) + 1;
int end = (index * pageSize);
for (int i = start; i <= end; i++)
{
if (searchResult != null)
{
int listCount = employeesSource.Count;
for (int x = 0; x < listCount; x++)
{
if (x == i)
{
searchResult.Add(employeesSource[x]);
break;
}
}
}
}
return searchResult;
}
private static List<Employee> SearchEmployees(string name)
{
List<Employee> employees = GetEmployees();
return employees.Where(r => r.Name == name).ToList();
}
private static List<Employee> GetEmployees()
{
List<Employee> employees = new List<Employee>();
int i = 0;
for (i = 0; i <= 100; i++)
{
Employee emp = new Employee();
emp.EmpID = i;
if (i % 2 == 0)
{
emp.Name = "Divisible by 2";
}
else if (i % 3 == 0)
{
emp.Name = "Divisible by 3";
}
else if (i % 5 == 0)
{
emp.Name = "Divisible by 5";
}
else if (i % 7 == 0)
{
emp.Name = "Divisible by 7";
}
else
{
emp.Name = "Other -- "+ i.ToString();
}
employees.Add(emp);
}
return employees;
}
}
Client
List<Employee> searchResult = DatabaseSimulator.GetData("Divisible by 2", 2, 2);
pamiętać, że nie zawsze powinny tworzyć nowe list z 'ToList' (np. w' SearchEmployees') po połączeniu tych metod. To bardzo nieefektywne. Zamiast tego po prostu zwróć zapytanie i na końcu wywołaj "ToList". –
@TimSchmelter Czy chcesz zwrócić 'IEnumerable' zamiast' List'? – Lijo
Tak. W takim przypadku lepiej byłoby zapewnić przeciążenie 'SearchEmployees' za pomocą/bez indeksu początkowego i końcowego). –