簡體   English   中英

如何編寫此復雜的LINQ to Entities查詢

[英]How to write this complex LINQ to Entities query

我正在寫一個應用程序,它將允許我們的用戶向他們的聯系人發送新聞通訊。 這是數據庫結構(僅重要字段):

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對象,以便我可以遍歷該對象並為每個聯系人發送一封電子郵件(而不是每個電子郵件地址)。

我有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.

我想在一個查詢中執行此操作。 這是我目前擁有的東西,我想我已經接近了,但這甚至無法編譯:

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()
                        }));

任何幫助是極大的贊賞!

List<NewsletterContactEmails> Recipients = objNewsletter.NewsletterToLists
    .SelectMany(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()
        }));

嘗試將第一個選擇作為SelectMany而不是Select

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM