2012-05-28 71 views
1

對於以下TSQL查詢,EF方法的等效語法是什麼?將t-sql查詢轉換爲EF的方法語法

select istb.service_id, ss.service_desc, selected=1 
from istb_services istb 
inner join setup_services ss on istb.service_id=ss.service_id 
where istb.istb_id=3 
union 
select ss.service_id, ss.service_desc, selected=0 
from setup_services ss 
where ss.service_id not in (select service_id from istb_services where istb_id=3) 

我試圖轉換不是在查詢的一部分像以下:

var _existing = context.istb_services.Where(e => e.istb_id == IstbID); 
var _others = context.setup_services.Except(_existing); 

但它產生編譯時間錯誤:

的關於「System.Data最好重載方法匹配.Objects.ObjectQuery.Except(System.Data.Objects.ObjectQuery)'有一些無效參數

我知道我不能將不同類型的ObjectQuery傳遞給.Except方法,但t母雞什麼是替代代碼?

謝謝,

+3

你可以做一個!任何(x => x ...)來實現NOT。 – ctorx

回答

1

嘗試以下方法:具有相同字段

var resultA = 
    from istb in istb_services 
    join ss in setup_services on istb.service_id equals ss.service_id 
    where istb.istb_id == 3 
    select new { istb.service_id, ss.service_desc, selected = true }; 

var resultB =    
    from ss in setup_services 
    where !istb_services.Any(istb => 
     istb.service_id == ss.service_id && 
     istb.istb_id == 3) 
    select new { ss.service_id, ss.service_desc, selected = false }; 

var result = resultA.Union(resultB); 

匿名類型初始化應當編譯到相同的匿名類型,使得兩個序列爲Union操作兼容。

相關問題