LINQ-запрос более глубокого уровня в лямбда-выражении - PullRequest
2 голосов
/ 13 января 2012

Я хотел бы получить тех сотрудников, у которых есть номер телефона == "666666", используя запрос LINQ.

Это определения классов:

public class Employees
{
    public List<Phones> Phones{get;set}
}
public class Phones
{
    public string Id{get;set;}
    public string Number{get;set;}
}

Это мой запрос (мое сомнение обозначено как ???):

var employees= data.GetEmployees()
                   .Where(e=> e.Phones ???i need to navigate a level below phones ???)
                   .Select(e => new Employee() 
                   {     
                        Id=e.Id,
                        Name=e.Name 
                   });

Моя проблема в том, что я не знаю, как перейти на более глубокий уровень в этом выражении LINQ, потому что в e=>e... у меня есть доступ к Phones как IEnumerable, но я бы хотел перейти к Phone ' s свойства.

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Самый простой способ сделать это - использовать вложенные запросы LINQ. В этом случае вы должны взглянуть на метод Any.

var employees= data
  .GetEmployees()
  .Where(e => e.Phones.Any(p => p.Number == "666666"))
  .Select(e => new Employee() {
    Id = e.Id,
    Name = e.Name
  });
3 голосов
/ 13 января 2012

Параметр, переданный методу where, является просто функцией, которая возвращает истину или ложь для каждого данного элемента, все методы (включая LINQ (при условии доступа к параметрам ref / out и т. Д.)) Могут по-прежнему вызываться внутри него:

var employees= data.GetEmployees()
               .Where(e => e.Phones.Any(p => p.Number == "666666"))
               .Select(e => new Employee() 
               {     
                    Id=e.Id,
                    Name=e.Name 
               });
1 голос
/ 13 января 2012
var employees= data.GetEmployees()
               .Where(e=> e.Phones.Contains(x=>x.Number == "666666"))
               .Select(e => new Employee() 
               {     
                    Id=e.Id,
                    Name=e.Name 
               });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...