构建LINQ查询

时间:2014-01-21 08:33:22

标签: c# 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 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

查询语法的变体

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

答案 2 :(得分:0)

此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