我已经完成了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。
答案 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
希望这会有所帮助!!