2016-10-24 65 views
-2

像下面的SQL查询,我试图让它LinQ ,,但它不工作的SQL工作,但LINQ不工作......我的错误在哪里?linq连接表与select子查询?

select (select X from X where X.yid=Y.id and X.FormNo=4),* 
from Y 
where Y.servicetype=3 

该SQL查询工作

public IEnumerable<NBelge> BelgeleriGetir2(int servicetype, int formno) 
{ 
    var db = new SERVISBAKIMEntities(); 
    var result = (from g in db.Y 
        join d in db.X 
        on g.id equals d.yid into ps 
        from d in ps.DefaultIfEmpty() 
        where g.servicetype == servicetype && d.FormNo == formno 
        select new {}); 
} 

LINQ这样的代码,但它不工作?哪里是真正的方式?

+0

所以你展示一个SQL查询和工作LINQ查询,但如果是你不工作的LINQ查询? –

+0

第一个代码块正在工作sql查询和第二个代码块不工作linq声明,谢谢 – enginel

+0

什么是“不工作”是什么意思?你有错误吗?什么是错误?你会得到意想不到的结果?你得到的结果是什么,它们与你期望的结果有什么不同? – itsme86

回答

0

最直接,使用子查询,是这样的:

var result = (from y in db.Y 
       where y.servicetype == 3 
       select new { y, x = (from x in db.X 
            where x.yid == y.id && x.FormNo == 4 
            select x.x).FirstOrDefault() } 
      ).ToList(); 

但我觉得用join更具有可读性。在SQL它看起来就像这样:

select X.x, Y.* 
from Y 
join X on Y.id == X.yid 
where Y.servicetype == 3 
and X.FormNo == 4 

使用LINQ:

var result = (from y in db.Y 
       where y.servicetype == 3 
       join x in db.X on y.id equals x.yid 
       where x.FormNo == 4 
       select new { y, x }).ToList(); 
+0

你不是指在子查询中选择x吗? – NetMage

+0

@NetMage - 在他的原始sql中,他从表x中选择字段x:'从X中选择X',所以我保留了它的第一个linq –

+0

是的,但是你有'select xx'作为结果,而不是'select x ' – NetMage