2014-01-21 3 views
0

Пожалуйста, помогите мне построить запрос LINQ.
У меня есть список List<SingleEntryReportCardModel> singleEntryReportCardModel который содержит EmployeeList внутренне.
Я хочу иметь все такие отчеты о единственном входе, которые соответствуют имени сотрудника в качестве входных данных. Я попытался сделать этоBuilding LINQ query

singleEntryReportCardModel = 
singleEntryReportCardModel 
.Where(x => x.EmployeeList.Select(y => y.EmployeeName.Contains(Name))) 
.ToList<SingleEntryReportCardModel>(); 

но бросает мне ошибку произнесения типа

Вот как это выглядит:

public class SingleEntryReportCardModel 
{ 
    public GoalReportCard GoalReportCard { get; set; } 
    public GoalTemplateModel GoalTemplate { get; set; } 
    public List<EmployeeInfoModel> EmployeeList { get; set; } 
} 
+0

Не могли бы вы предоставить нам дополнительную информацию? В частности, как выглядит ваш 'SingleEntryReportCardModel'? Мы не имеем представления о свойствах или типах этого объекта. –

+0

Получение ошибки времени компиляции --- Невозможно преобразовать выражение лямбда для делегирования типа «System.Func », потому что некоторые возвращаемые типы в блоке неявно конвертируются в тип возврата делегата – user2299182

ответ

0

Этот LINQ будет извлекать все элементы, на которых t он содержит, по крайней мере, один сотрудник, который содержит Name:

var result = singleEntryReportCardModel 
    .Where(x => x 
     .EmployeeList 
     .Any(y => y.EmployeeName.Contains(Name)) //at least one employee contains the name 
    ) 
    .ToList(); //obtain the list 
4

Я не уверен, что точная проблема, но следующая строка выглядит неправильно:

.Where(x => x.EmployeeList.Select(y => y.EmployeeName.Contains(Name))) 

Результат Select будет IEnumerable<bool>. Я не думаю, что это даже действительный аргумент Where, но я могу ошибаться. Мне не имеет смысла говорить «Я хочу, чтобы все элементы, где некоторая коллекция bool s».

Может быть, вы хотите:

.Where(x => x.EmployeeList.Any(y => y.EmployeeName.Contains(Name))) 

Кроме того, как только вы получите это работает, вы должны быть в состоянии удалить общий аргумент типа из вашего вызова ToList:

.ToList(); 
+0

Didn ' я вижу, что вы уже ответили на это. :-) – scheien

1

вариант для запроса синтаксис

var res = (from x in singleEntryReportCardModel 
      where x.EmployeeList.Any(y=>y.EmployeeName.Contains(Name)) 
      select x).ToList(); 
+0

Выглядит хорошо, но вам не хватает вызова ToList. – Sam

+0

@ Сэм, ты прав – Grundy