2013-08-20 29 views
0

我有休耕SQL-選擇:SQL-選擇轉換爲EF LINQ到實體

select * from tlieferschein l 
inner join tbestellung b on l.kbestellung = b.kbestellung 
inner join tkunde k on b.tkunde_kkunde = k.kkunde 
where b.nStorno = 0 
and (select count(*) from tlieferscheinpos x inner join tbestellpos y on x.kbestellpos = y.kbestellpos and x.klieferschein = l.klieferschein) > 0 
and b.cBestellNr = '718' 
order by l.derstellt desc 

現在,我要轉換這個SQL-選擇LINQ。我已經嘗試過休耕,但它不工作:

var result = from l in context.tLieferschein 
    join b in context.tbestellung on l.kBestellung equals b.kBestellung 
    join k in context.tkunde on b.tKunde_kKunde equals k.kKunde 
    where b.nStorno == 0 && (from x in context.tLieferscheinPos join y in context.tbestellpos on x.kBestellPos equals y.kBestellPos && x.kLieferschein equals l.kLieferschein).Count() > 0 
    orderby l.dErstellt descending 
    select new {l, b, k}; 

我希望有人能幫助我,我做錯了什麼。

這是我第一次嘗試寫一個Linq-Query for Entity Framework。

回答

0

@Thomas在你的表達中一切都很好,除非你錯過了在where語句中添加另一個約束,這是b.cBestellNr = '718',在你的表達式中添加它並再次檢查。

供您參考整個表達式是:

var result = from l in context.tLieferschein 
    join b in context.tbestellung on l.kBestellung equals b.kBestellung 
    join k in context.tkunde on b.tKunde_kKunde equals k.kKunde 
    where b.nStorno == 0 && (from x in context.tLieferscheinPos join y in context.tbestellpos on x.kBestellPos equals y.kBestellPos && x.kLieferschein equals l.kLieferschein select new {x, y}).Count() > 0 
    && b.cBestellNr == 718 
    orderby l.dErstellt descending 
    select new {l, b, k}; 

我相信,子查詢應該如下:

(from x in context.tLieferscheinPos join y in context.tbestellpos 
on x.kBestellPos.GetValueOrDefault(0) equals Convert.ToInt32(y.kBestellPos) && x.kLieferschein equals l.kLieferschein 
select new {x, y}).Count() > 0 

希望這將幫助!

+0

在哪裏表達式的子查詢(計數)有什麼問題... – BennoDual

+0

@ThomasKehl,你是否得到任何異常或輸出不符合預期?還有什麼是cBestellNr字段的數據類型? –

+0

我無法編譯它。在子查詢中加入似乎存在問題。 cBestellNr是int類型的。 – BennoDual