0

いくつかのテーブルからいくつかのフィールドを選択したいので、SQLクエリをlinqに変換するのを手伝ってください。これらの値をmvc3webgridに表示する必要があります。

内部結合をlinqに変換する方法は?それともEFでそれを行う方法はありますか?

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()

上記SecurityIdentifier_AllNAV、ビューです。Fireball_Reportingデータベース名。Answerでは、最初の内部結合まで実行されます。最後のセクションを完了するのを手伝ってください。

4

1 に答える 1

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 句でテーブルをリンクする必要がなくなります。

于 2012-04-20T15:57:38.720 に答える