2011-01-24 73 views
0

我有一個MessageThread實體,它包含消息實體。外鍵已設置,所以我可以輕鬆地從MessageThread導航到所有消息。每條消息都有一個從和到的地址。我想編寫一個查詢來檢索特定地址已寫入或接收到消息的所有消息線程。RIA服務,where子句使用子屬性

MessageThread 
{ 
    EntityCollection<Message> messages; 
} 

Message 
{ 
    long FromAccount; 
    long ToAccount; 
} 

查詢應該是這樣的,但我無法弄清楚如何從MessageThread類導航到收件人和發件人地址的所有道路。

public IQueryable<MessageThread> GetMessageThreads(long userAccount) 
{ 
    return from messageThread in this.ObjectContext.MessageThreads 
      where messageThread.Messages.ToAddress == userAccount || 
       messageThread.Messages.FromAddress == userAccount 
      select messageThread; 
} 

該查詢將不能工作,因爲messageThread.Messages是一家集兩者ToAddressFromAddress不能從收集直接訪問。

回答

0

先選擇子項目,然後包含父項目。然後在最後,只需選擇您之後的父實體列表。

Messages.Include("MessageThread") 
     .Where(m => m.FromAccount == userAccount 
       || m.ToAccount == userAccount) 
     .Select(m => m.MessageThread) 

如果您離開選擇結束,您會收到包含父母的郵件列表。這取決於你在哪裏之後。

OR ....(這一點,這是一個有點更整潔)

MessageThreads.Where(s => s.Messages.Any(m => m.FromAccount == userAccount 
              || m.ToAccount == userAccount))