2013-02-13 54 views
2

我得到一個錯誤,當我嘗試運行LINQ以下查詢到的實體:爲什麼「拉姆達」沒有在我的LINQ支持,以實體語法

public IEnumerable TestOne2() 
{ 
    var query = this.Context.CmnAddressCities 
     .Join(this.Context.CmnAddressStates, 
       p => p.StateID, q => q.StateID, 
       (p, q) => SelectSearchColumns) 
     .ToList(); 

    return query; 
} 

public Expression<Func<CmnAddressCity,CmnAddressState, dynamic>> 
    SelectSearchColumns = (e,r) => new 
     { 
      CityID = e.CityID, 
      CityName = e.CityName, 
      StateName=r.StateName, 
     }; 

錯誤消息:

LINQ to Entities不支持LINQ表達式節點類型'Lambda'。

想知道爲什麼會出現這個錯誤,如何解決這個問題。

如有任何疑問,請提問,謝謝。

回答

3

下面應該工作:

var query = this.Context.CmnAddressCities 
       .Join(this.Context.CmnAddressStates, 
         p => p.StateID, 
         q => q.StateID, 
         SelectSearchColumns) 
       .ToList(); 

看到倒數第二行的差異。您的版本創建一個返回表達式的表達式。 EF提供程序無法將其轉換爲SQL,SQL中表達式的等同性如何?這不存在。
你只需要傳遞你的表達式作爲參數本身。

2

該表達

(p, q) => SelectSearchColumns 

是返回表達的表達。嘗試自行更改爲SelectSearchColumns

2

在表達式(p, q) => SelectSearchColumns中,您將SelectSearchColumns傳遞給Join方法,而不是調用它。查詢提供程序然後無法將其轉換爲SQL語句,因爲它作爲數據傳遞,而不是被解釋爲調用。

您需要用

.Join(this.Context.CmnAddressStates, 
    p => p.StateID, 
    q => q.StateID, 
    (p, q) => SelectSearchColumns(p, q)) 

或短版

.Join(this.Context.CmnAddressStates, 
    p => p.StateID, 
    q => q.StateID, 
    SelectSearchColumns) 
+0

洪扎Brestan,太謝謝你了,現在它的工作 – shamim 2013-02-13 11:20:47