2016-11-22 4 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

私は自分の答えを削除して、あなたをアップウィートしました。なぜなら '新しい[cc、vc]'が 'select'の中で利用できるようにするのを忘れていたからです。私の答え、あなたの十分なw/oであなたのものへの参照を削除してください:) –

+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 
} 
関連する問題