2012-04-20 11 views
0

いくつかのテーブルからいくつかのフィールドを選択したい SQLクエリをlinqに変換するのを手伝ってください。これらの値をmvc3 webgridに表示する必要があります。内部結合を持つSQLクエリをlinqラムダ式に変換する方法は?

内部結合をlinqに変換するにはどうすればよいですか?それとも、EFでそれを行う方法はありますか?上記SecurityIdentifier_AllNAV

SELECT 
DISTINCT 
    SecurityIdentifier_All.SecurityId, 
    NAV.CompanyName, 
    NAV.SecurityType, 
    SecurityIdentifier_All.Identifier, 
    SecurityIdentifier_All.SecurityIdentifierTypeId 
FROM 
    Fireball_Reporting..Reporting_DailyNAV_Pricing NAV 
INNER JOIN 
    Fireball_Reporting..SecurityIdentifier_All ON 
     SecurityIdentifier_All.SecurityId = NAV.PricingSecurityID 
inner join 
    (
    SELECT SecurityId, MAX(SecurityIdentifierTypeId) SecurityIdentifierTypeId 
FROM Fireball_Reporting..SecurityIdentifier_All 
where SecurityIdentifierTypeId in (1,16) 
group by SecurityId 
    ) IdentifierType on 
    IdentifierType.SecurityId = SecurityIdentifier_All.SecurityId and 
    IdentifierType .SecurityIdentifierTypeId = 

SecurityIdentifier_All.SecurityIdentifierTypeId 
WHERE 
    Date = Fireball_Configuration.dbo.PreviousBusinessDay() 

図です。 Fireball_Reportingデータベース名。 1番目の内部結合までの解答は完了しました。私は最後のセクションを完了するために私を助けてください。

+1

あなたの質問は非常に複雑です。誰かがこの仕事をすべてやってくれるとは思わない?簡単にしてください。 – usr

答えて

0

私の元の回答は、2つの結合だけを含むSQLクエリを含むあなたの質問の以前のバージョンを満たしました。

3つのINNER JOINSがあるので、1つのLINQクエリでそのすべてを実行しようとはしません。あなたは確かに可能ですが、それはあまり読みやすいものではありません(あなたのSQLバージョンとよく似ています)。

サブクエリを別の手順で実行します。このようなもの:

var identifierType = context.SecurityIdentifier_Alls 
    .Where(si => si.SecurityIdentifierTypeId == 1 || si.SecurityIdentifierTypeId == 6) 
    .GroupBy(si => si.SecurityId) 
    .Select(g => new { SecurityId = g.Key, SecurityIdentifierTypeField = g.Max(si => si.SecurityIdentifierTypeId) }); 

var query = 
    (from nav in context.Reporting_DailyNAV_Pricings 
    from si in context.SecurityIdentifier_Alls 
    from idt in identifierTypes 
    where si.SecurityId = nav.PricingSecurityID 
     && idt.SecurityId == si.SecurityId 
    select new { si.SecurityId, nav.CompanyName, nav.SecurityType, si.Identifier, si.SecurityIdentifierTypeId }) 
    .Distinct(); 

私は前回の営業日を取得するためにUDFで作業しませんでした。また、これはどれもテストされていませんが、これはとなります。探しているものはです。

ご利用いただけるものがわかりません。ナビゲーションプロパティを設定したLINQ-to-Entitiesを使用している場合は、上記のコードのwhere句でテーブルをリンクする必要がなくなります。

+0

参加インナー行う必要があり INNERが SecurityIdentifier_All.SecurityId = NAV.PricingSecurityID は、内側が ( SELECT SecurityId、MAX(SecurityIdentifierTypeId)はFireball_Reporting..SecurityIdentifier_All SecurityIdentifierTypeId中(FROM をSecurityIdentifierTypeId参加ON Fireball_Reporting..SecurityIdentifier_Allを登録しよう助けplzはSecurityId によって1,16) 群)IdentifierType IdentifierType.SecurityId = SecurityIdentifier_All.SecurityIdと IdentifierType .SecurityIdentifierTypeId = SecurityIdentifier_All.SecurityIdentifierTypeId 0で日付= Fireball_Configuration.dbo.PreviousBusinessDay() –

+0

Duane Theriot .... PLZヘルプME –

+0

私はいくつかのコードを追加しました。あなたの更新された質問は私が最初に答えたものよりはるかに複雑です。これは私がそれを取ることができる限りです。頑張って! –

関連する問題