2012-06-27 18 views
3

我熟悉SQL的工作方式,但是使用LINQ to SQL讓我頭疼。我有以下查詢,但我無法將其更改爲LINQ to SQL。有人可以幫助我解決這個問題,或解釋我如何解決這個問題嗎?如何在LINQ to SQL中創建此SQL?

SELECT 
     DISTINCT Pr.Pcode_, 
     Pr.Omschrijving, 
     Pt.TypeOmschr 
    FROM 
     Projecten AS Pr 
    INNER JOIN 
     ProjectTypen AS Pt 
     ON Pr.ProjType_ = Pt.TypeID 
     AND 
     Pr.Status NOT IN ('Afgerond', 'Afgewezen') 
     LEFT OUTER JOIN 
     Personeel AS Pe 
     ON Pr.SeniorId_ = Pe.PerId_ 
     OR 
     Pr.CorId_ = Pe.PerId_ 
     WHERE 
     (Pe.Naam LIKE '%%') 
     OR 
     (Pr.Omschrijving LIKE '%%') 
     OR 
     (Pr.Pcode_ LIKE '%%') 
     OR 
     (Pt.TypeOmschr LIKE '%%') 
     ORDER BY 
     Pr.Pcode_ 

編輯:
我有以下L2S,但它無法正常工作。我收到以下錯誤:名稱'Pe'不在'equals'左側的範圍內。我想問題是左連接,但解決方案是什麼?

from Pr in _db.Projectens 
    join Pt in _db.ProjectTypens on Pr.ProjType_ equals Pt.TypeID 
    join Pe in _db.Personeels on ((Pr.SeniorId_ == Pe.PerId_) || (Pr.SeniorId_ == Pe.PerId_)) into P 
    where Pr.Pcode_.Contains(search) || Pr.Omschrijving.Contains(search) || Pt.TypeOmschr.Contains(search) || Pe.Naam.Contains(search) 
    select new SearchProjectViewModel { 
     ProjectCode = Pr.Pcode_, 
     ProjectName = Pr.Omschrijving, 
     ProjectType = Pt.TypeOmschr 
    }; 
+0

是否要將此SQL轉換爲Linq? – Scorpion

+0

我已經試過這'來自PR的_db.Projectens 加入鉑在Pr.ProjType_ _db.ProjectTypens等於Pt.TypeID 在_db.Personeels加入與PE((Pr.SeniorId_ == Pe.PerId_)||鐠.SeniorId_ == Pe.PerId_)into P select new {...};' 但是當然可以做一個存儲過程,但我想學習LINQ to SQL的語法.. –

+0

@ GiedoDonkers在我看來像你的L2S幾乎是正確的,除了你選擇之前缺少'where'子句 - 就像'Where Pe.Naam!= null || Pr.Omschrivijving!= null || ....'(我認爲我認爲你的'LIKE'語句只是檢查字符串是否正確?如果不是,你可能會對http://stackoverflow.com/questions/835790/how-to-do感興趣-sql-like-in-linq) –

回答

0

我覺得

join Pe in _db.Personeels on ((Pr.SeniorId_ == Pe.PerId_) || (Pr.SeniorId_ == Pe.PerId_)) into P 

應該

join Pe in _db.Personeels on ((Pr.SeniorId_ equals Pe.PerId_) || (Pr.SeniorId_ equals Pe.PerId_)) into P 

嘗試,讓我知道,如果這個工程。

+0

我已經嘗試過,但不幸的是,這並不奏效,感謝您的嘗試。 –