1

ユーザーが連絡先にニュースレターを送信できるようにするアプリケーションを作成しています。データベース構造は次のとおりです (重要なフィールドのみ)。

Contacts(tbl)       ContactEmails(tbl)       Newsletters(tbl)
  ContactID           ContactEmailID           NewsletterID
  ...                 ContactID (fk)           ...
                      EmailAddress             
                      Deleted
                      ...


NewsletterLists(tbl)       NewsletterToLists(tbl)
  NewsletterListID           NewsletterID (fk)
  ...                        NewsletterListID (fk)


NewsletterListToContacts(tbl)
  NewsletterListID (fk)
  ContactID (fk)
  Active
  Deleted
  UnsubscribedOn
  ...

今、私は次のように構成されたクラスを持っています:

public class NewsletterContactEmails
{
    public int ContactID { get; set; }
    public List<string> EmailList { get; set; }
}

連絡先ごとに NewsletterContactEmails オブジェクトを用意して、それをループして、連絡先ごとに (各メール アドレスではなく) 1 つのメールを送信できるようにします。

作業を開始する Newsletter オブジェクトがあります。したがって、疑似的には...

1. Get NewsletterLists this newsletter is to send to.
2. Get Active (double opted-in) and non-deleted/unsubscribed DISTINCT Contact List from said NewsletterLists.
3. Create NewsletterContactEmails object for each contact and add their non-deleted DISTINCT list of email addresses.

これを1つのクエリで実行したい。これが私が現在持っているものです。私は近いと思いますが、これはコンパイルさえしません:

List<NewsletterContactEmails> Recipients = objNewsletter.NewsletterToLists
                    .Select(ntl => ntl.NewsletterList.NewsletterListToContacts
                        .Where(nl => nl.Active == true && nl.Deleted == false && nl.UnsubscribedOn == null)
                        .Select(nl => new NewsletterContactEmails {
                            ContactID = nl.ContactID,
                            EmailList = nl.Contact.ContactEmails.Where(ce => ce.Deleted == false).Select(ce => ce.EmailAddress).Distinct().ToList()
                        }));

どんな助けでも大歓迎です!

4

1 に答える 1