Построение запроса LINQ

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

 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; }
}

3 ответа

Решение

Этот LINQ извлечет все элементы, в которых список сотрудников содержит хотя бы одного сотрудника, который содержит 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

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

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

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

Возможно, вы хотите это:

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

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

.ToList();

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

var res = (from x in singleEntryReportCardModel
          where x.EmployeeList.Any(y=>y.EmployeeName.Contains(Name))
          select x).ToList();
Другие вопросы по тегам