2014-01-21 56 views
0

请帮我构建一个LINQ查询。
我有一个列表List<SingleEntryReportCardModel> singleEntryReportCardModel其中包含内部EmployeeList
我想拥有所有与员工姓名相匹配的单一条目报告作为输入。 我试图这样做构建LINQ查询

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

获取编译时错误---无法将lambda表达式转换为委托类型'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))) 

的结果210将是IEnumerable<bool>。我认为这不是对Where的有效论据,但我可能是错的。对我来说,“我想要所有的元素都集中在一些bool之间”是没有意义的。

也许你想这样的:

.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