2016-11-22 58 views
0

我有T-SQL複雜的腳本,我無法將其轉換爲LINQ語法:如何將T-SQL與聚合函數轉換爲LINQ?

SELECT cc.ContractID, 
     Max(CASE WHEN cc.CompanyID = vc.CompanyID THEN vc.CompanyTitle END) AS CompanyID, 
     Max(CASE WHEN cc.ContractorID = vc.CompanyID THEN vc.CompanyTitle END) AS ContractorID 
FROM ConContracts cc 
     JOIN ViewCompanies vc 
     ON vc.CompanyID IN (cc.CompanyID, cc.ContractorID) 
GROUP BY cc.ContractID 

任何一個能幫助我嗎?

回答

2

我以前Linqer嘗試和轉換此查詢,並結束了:

from cc in db.ConContracts 
from vc in db.ViewCompanies 
where 
    vc.CompanyID == cc.CompanyID || 
    vc.CompanyID == cc.ContractorId 
group new {cc, vc} by new { 
    cc.ContractID 
} into g 
select new { 
    g.Key.ContractID, 
    CompanyID = g.Max(p => (p.cc.CompanyID == p.vc.CompanyID ? p.vc.CompanyTitle : null)), 
    ContractorID = g.Max(p => (p.cc.ContractorId == p.vc.CompanyID ? p.vc.CompanyTitle : null)) 
} 

我決不是一個LINQ專家,所以不知道肯定這是否是有效的答案,但如果它至少在功能上令人滿意,可能會有幫助或有意思,因爲這意味着你可以用Linqer來回答你的問題。

+0

是正確的,但我已經迫使因爲我需要在選擇範圍內使用更多的領域來使用你的代碼,我必須補充這些領域也在團隊中。 –

+0

我已經刪除了我的答案,並提高了你的答案,因爲我忘記了我需要'new [cc,vc}'以使它們在'select'中可用。請刪除對我的答案的引用,你的足夠好的瓦特/他們:) –

+1

@IvanStoev謝謝,我已經編輯了相應的答案。我感覺有點不好,因爲我所做的只是弄清楚如何使用Linqer(我從來沒有真正使用過LINQ或者之前爲它寫過一個查詢!),而你清楚地知道這是否是正確/有效的解決方案。 – 3N1GM4

0

這不完全等同於您的T-SQL,但我懷疑它可能會給您想要的結果。

我懷疑ContractID對ConContracts表是唯一的,而CompanyID對於ViewCompanies表是唯一的,因此只有當您使用group by時才需要添加max。

所以,如果你的表是正確定義,你可以這樣做

(from cc in ConContracts 
select new 
{ 
    cc.ContractID, 
    CompanyID = cc.Company.CompanyTitle, 
    ContractorID = cc.Contractor.CompanyTitle 
} 
他們都