と の間には 1 対多の関係がcampaigns
ありcampaign stats
ます。キャンペーンの統計アイテムは、データベース内で 1 日のキャンペーンに対して最大 1 つのエントリを持つことができます。
したがって、2013 年 9 月 20 日から開始して、関連のない場所をDateTime.Now
取得しますが、統計が欠落している実際の日付も取得したいと考えています。campaigns
campaign stat
campaign name
たとえば、stat date
(それがありません)を表示したいと思います。これに対する解決策を思い付くのに苦労していますが、このコードを書き始めました。
var fromDate = new DateTime(2013, 9, 20);
var toDate = DateTime.Now;
var dates = Enumerable.Range(0, toDate.Subtract(fromDate).Days + 1)
.Select(d => fromDate.AddDays(d));
var a = from c in _db.Campaigns
join s in _db.CampaignStats on c.Id equals s.CampaignId into s1
from s in s1.DefaultIfEmpty()
where s == null
select new {c, s};
サンプル出力は次のようになります: (キャンペーン 1 には 2013 年 9 月 20 日と 2013 年 9 月 22 日の統計があります)
`Campaign 1 9/21/2013`
`Campaign 1 9/23/2013`
`Campaign 1 9/24/2013`
`...`
編集
Bob の回答を使用して、次の LINQ クエリを作成しました。
(from counts in
(from cal in _db.CalendarMonths
from c in _db.Campaigns
let statCount = (from s in _db.CampaignStats
where s.CampaignId == c.Id
where s.Date == cal.date
group s by s.Id into s1
select s1.Count()).FirstOrDefault()
select new
{
cal.date,
c.Id,
statCount
})
where counts.statCount == 0
select new
{
counts.Id,
counts.date,
});