2014-01-21 58 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