2009-06-30 60 views
1

我已經使用LINQ麻煩,我會在例子來解釋:LINQ到實體包含()和嵌套查詢

我有一個名爲僱員數據庫表,得到了名字和姓氏列, 和方法搜索職工它獲取名稱列表列表作爲參數,在此列表中的元素名稱格式像這樣的「弗雷德刻錄」,或this1「死神」, 已經tryed這些方法沒有運氣= [

//just all employees 
var allData = from emp in Context.Employee select emp; 

var test1 = from emp in allData 
      where(emp.FirstName + " " + emp.LastName).Contains 
      ("" + ((from n in nameList select n).FirstOrDefault())) 
      select emp; 

var test2 = (from emp in allData 
      where (emp.FirstName + " " + emp.LastName) 
      == ((from n in nameList select n).FirstOrDefault()) 
      select emp); 

var test3 = from emp in allData 
      where (from n in nameList select n).Contains 
      (emp.FirstName + " " + emp.LastName) 
      select emp; 

第一個和第二個查詢給出:{「無法創建一個類型'閉包類型'的常量值。只有原始類型('suc 「異常

和第三:{」LINQ to Entities does not recognized the method'布爾Contains [String](System.Collections.Generic.IEnumerable`1('Int32,String,and Guid')is supported in this context。 [System.String] System.String)」的方法,而這種方法不能被翻譯成店表達。「}

會很高興聽到您的建議:)

謝謝!



p.s.
是的,我知道它可以在列表中拆分名稱並分別進行比較,但仍然好奇爲什麼不能使用這些查詢。

回答

2

我假設nameList在這種情況下是一個內存集合,並且您正嘗試使用LINQ to SQL技巧在實體框架內創建SQL「IN」子句。不幸的是,EF不支持這種語法(還)。根據您嘗試匹配的記錄數量,您可以針對您所需的每個孩子運行單獨的查詢。或者,您可以使用連接來構建entityql查詢,以將來自nameList的多個項作爲獨立的OR子句附加到WHERE操作中。