2015-02-06 29 views
-1

我想在LINQ中創建下面的代碼。我使用Linqpad來測試我的代碼,但不斷收到錯誤:錯誤與.Any和.Contains for Linq查詢爲Oracle

"NotSupportedException: Constructing or initializing instances of the type <>f__AnonymousType0 2[LINQPad.User.RNIS_MAINTBOUNDARY_V,System.Linq.IQueryable 1[System.Int32]] with the expression http://localhost:14722/WCFDataservice.svc/RNIS_DRE_AREA_V is not supported."

我的代碼如下:

var roads = 
from d in RNIS_MAINTBOUNDARY_V 
let ts2 =  
      from dretab in RNIS_DRE_AREA_V 
      select dretab.DRE_CODE 
     where ts2.Contains(d.AUTH_ID) 
    select d; 
    roads.Dump(); 

作爲參考,2場的加入,即AUTH_ID和dre_code都Oracle編號字段。爲什麼我會得到這個錯誤?

回答

0

你的LINQ查詢被轉換爲方法的鏈由它看起來像LINQ到實體不喜歡{ d, ts2 = ... }匿名類型異常調用

var roads = RNIS_MAINTBOUNDARY_V 
    .Select(d => new { d, ts2 = RNIS_DRE_AREA_V.Select(dretab => dretab.DRE_CODE) }) 
    .Where(τ0 => τ0.ts2.Contains(τ0.d.AUTH_ID)) 
    .Select(τ0 => τ0.d); 

任何。

儘量只移動內部查詢到拉姆達:

var roads = RNIS_MAINTBOUNDARY_V 
    .Where(d => RNIS_DRE_AREA_V.Select(dretab => dretab.DRE_CODE).Contains(d.AUTH_ID)); 

LINQ到實體可能不喜歡這個要麼,所以你可以嘗試一個真正的加盟:

var roads = RNIS_MAINTBOUNDARY_V 
    .GroupJoin(
     RNIS_DRE_AREA_V, 
     d => d.AUTH_ID, 
     dretab => dretab.DRE_CODE 
     (d, dretabs) => new { d, count = dretabs.Count() }) 
    .Where(p => p.count > 0) 
    .Select(p => p.d);