SQL-Select转换为EF linq到实体

时间:2013-08-20 12:52:15

标签: c# linq entity-framework linq-to-entities

我已经完成了SQL-Select:

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-select转换为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。

1 个答案:

答案 0 :(得分:0)

@Thomas你的表达式中的一切都很好,除非你错过了在b.cBestellNr = '718'的where语句中添加另一个约束,在你的表达式中添加它并再次检查它。

供你参考,整个表达式为:

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

希望这会有所帮助!!

相关问题