2016-10-24 64 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