0

私の質問は、左外部結合を実行する方法ですが、linqToEF/SQL で日時フィールドに基づいて欠損値を含める方法です。特定の質問をするために大きな問題を切り詰めようとしています。

私は3つのテーブルを持っています。以下にそれらを描いてください。

  • タイムログ | Id、StartDateTime、AccountNumber、ContractNumber
  • 契約 | Id、ContractNumber、AccountNumber、Value、StartDateTime、EndDateTime
  • アカウント | Id、AccountNumber、AccountName、Eメール、FirstName、LastName

次のようにlinqでgroup byを実行しています:

group new {contracts, timelogs} by new { accounts.AccountNumber, accounts.AccountName, Year = timelogs.StartDateTime.Year, Month = timelogs.StartDateTime.Month } into g

タイムログ テーブルには、特定のアカウントで 1 か月間送信されたタイムログのみが含まれます。タイムログが送信されていない場合、予想どおり、エントリは出力されません。

次の例を参照してください。

アカウント「Blah」には、月 5 のタイムログが送信されていません。したがって、以下のサンプル出力で Blah のエントリが欠落しています。

AccountName | Account Number | Month | Year
Bling           654321          5      2013
Bling           654321          6      2013
Blah            123456          6      2013
Bling           654321          7      2013
Blah            123456          7      2013
Bling           654321          8      2013
Blah            123456          8      2013

私はこれをやろうとしましたが、残念ながら、配列がローカルであるため、これは機能しません。

join months in new int[] { 1,2,3,4,5,6,7,8,9,10,11,12 } on timelogs.StartDateTime.Month equals months
join years in new int[] { 2008,2009,2010,2011,2012,2013,2014,2015,2016 } on timelogs.StartDateTime.Year equals months

DateTime フィールドから欠落している月/年に基づいて、linq から SQL/エンティティ フレームワークへの結合を実行するにはどうすればよいですか? タイムログがなくても、5 か月目の Blah を含めたいと思います。

4

1 に答える 1