Построение запроса 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
, но я могу ошибаться. Мне не имеет смысла говорить: "Я хочу, чтобы все элементы были bool
s".
Возможно, вы хотите это:
.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();