sql >> データベース >  >> RDS >> Sqlserver

左結合 Linq の内部結合に変換

    問題は、OutPut で Year、City、および QsNo をチェックしていることです。 結合後の変数...ただし、OutPut が null の場合 (AllCosts に行がない場合に発生します)、これらのチェックは常に false になるため、ペア (コード、OutPut) は where 句によって除外されます。 EF はこの事実を検出し、内部結合を使用するだけでより効率的なクエリを生成します。

    本当にやりたいことは、(コード、コスト) ペアでフィルタリングするのではなく、Costs から候補行を除外することです。これを行うには、フィルターを上に移動して、Costs テーブルに直接適用することができます:

    var Result = from code in ent.ProductCodes
                         join cost 
                           in ent.Costs.Where(c => c.Year == Year && c.City == City && c.QsNo == Qsno)
                           on new { code.Year, code.Code } equals new { cost.Year, cost.Code }
                           into AllCosts
                         from OutPut in AllCosts.DefaultIfEmpty()
                         where code.PageNo == PageNo
                         select new
                         {
                             ProductCode = code.Code
                             Col6 = OutPut.Price
                         };
    



    1. SQL Server BCPは破損したファイルをエクスポートしますか?

    2. イベントで最大のシーケンシャルストリークを取得

    3. SQLで一意の列の数を取得する

    4. 500-エラーが発生しました– Joomlaに新しい記事を追加するときに、DB関数はエラーを報告しません