私はこの Linq クエリに苦労しています...次の 2 つのテーブルがあります: 1) EmailRunHeaders - 列: Id、EmailRunId、EmailId 2) EmailTrackers - 列: Id、EmailId
毎日、大量のメールが送信されます。一意の「EmailRunId」が電子メールのバッチ/グループに割り当てられ、各電子メールに「EmailId」が割り当てられます。この情報は、「EMailHeaders」テーブルに保存されます。そのため、テーブル内の各 emailId は一意ですが、EmailRunId は複数回表示されます。各「バッチ」または実行には複数の電子メールがあるためです。
HTTP ハンドラーを使用して電子メールが開かれると、その開封が EmailTracker テーブルに記録され、特定の EmailId が保存されます。電子メールは複数回開かれる可能性があるため、EmailId がこのテーブルに複数回表示される可能性があります。
メールの実行ごとに、複数回開封されたメールを二重にカウントせずに、開封されたメールの総数が必要です。
これは私がこれまでに持っているものです。ネストされたクエリは正常に機能します。実行ごとに開かれた電子メールの総数を返しますが、実行ごとに少なくとも 1 つが開かれた場合に限ります。次に、それを別の結合でラップして、ヘッダーテーブルからすべての個別の EmailRunIds を返すようにしました..しかし、それが私が立ち往生しているところです..「ah1」から EmailRunId を取得する方法がわかりません。
from arh1 in EmailRunHeaders.Select(x => x.EmailRunID).Distinct()
join eo in
(from et in EmailTrackers
join arh2 in EmailRunHeaders
on et.EmailId equals arh2.EmailID.ToString() into j1
from j2 in j1.DefaultIfEmpty()
group j2 by j2.EmailRunID
into g
select new {runId = g.Key, count = g.Count()})
on arh1 equals eo.runId into tg
from tg2 in tg.DefaultIfEmpty()
select tg2