0

我正在使用實體框架中的數據庫優先方法,其中必須從實體中檢索特定的列。從IQueryable DB第一種方法獲取自定義列EF

Public IQueryable<Entity.Employees> GetEmployeeName(String FName,String LName) 
{ 
    var query = (from s in Employees 
        where s.firstName = FName && s.lastName = LName 
        select new {s.firstName, s.middleName}); 
    return query; 
} 

這裏return語句拋出一個錯誤的位置似乎它不與Employees(實體)列匹配。你能幫我解決這個問題嗎?提前致謝。

回答

0

您需要使用==進行比較,您還需要使用動態類型作爲返回類型,因爲您正在返回自定義匿名類型。試試這個

Public IQueryable<dynamic> GetEmployeeName(String FName,String LName) 
{ 
var query=(from s in Employees 
where s.firstName==FName && s.lastName==LName 
select new {s.firstName,s.middleName}); 
return query.AsQueryable(); 
} 

最後你會像下面一樣使用它,請記住,intelisense在動態對象上不起作用。

var query = GetEmployeeName("Jake", "Smith"); 
      List<dynamic> results = query.ToList(); 
      foreach (dynamic result in results) 
      { 
       string fristName = result.FirstName; 
       string lastName = result.MiddleName; 
      } 
+0

我已經修改爲==,但我面臨的問題是在Entity.Employees我們有4列,但var查詢我只想在select語句中的2列。所以我得到的錯誤如下:'匿名類型: a是新的{} 不能隱式轉換類型'System.Linq.IQueryable'<<匿名類型:字符串firstName,字符串middleName >>'to'System.Linq .IQueryable '。顯式轉換存在(你是否缺少一個轉換?)' – user3129206

+0

我剛更新了我的文章。由於您正在返回匿名類型,因此您需要使用動態類型作爲返回類型。或者,您可以使用兩個字段FirstName和MiddleName創建自定義包裝類型,然後返回該類型。這可以讓您在從結果中獲取數據時讓智能工作。 – Leadfoot

+0

我想訪問這個方法的方法[鏈接](http:// localhost:1985/Employee.svc/GetEmployeeName?FName ='Jake'&LName ='Smith')但出現錯誤。我想獲得特定的列而不是整個實體列。請您建議或提供一個示例代碼片段如何實現此目標。感謝您提前。 – user3129206

相關問題