2010-12-20 60 views
0

我無法弄清楚在LINQ/EF查詢中如何(以及在​​哪裏)訂購子集合。在EF/LINQ查詢中訂購子集合

基本上我有一個SubscriptionTypes集合,每個都有自己的訂閱集合。我希望集合中的每個Subscription都由NumberOfMonths定購。

這裏是我當前的查詢:

public IQueryable<SubscriptionType> SubscriptionTypesByProperty(string propertyCode) 
{ 
    return from a in db.SubscriptionTypes.Include("Subscriptions") 
      where a.Subscriptions.Any(x => x.PropertyCode == propertyCode) 
      select a; 
} 

我想訂閱由NUMBEROFMONTHS訂購。我試過這個:

public IQueryable<SubscriptionType> SubscriptionTypesByProperty(string propertyCode) 
    { 
     return from a in db.SubscriptionTypes.Include("Subscriptions") 
       where a.Subscriptions.OrderBy(q => q.NumberOfMonths).Any(x => x.PropertyCode == propertyCode) 
       select a; 
    } 

..但這並沒有正確訂購訂閱。

有沒有人知道一個簡單的方法來做到這一點?

更新:訂閱類型和訂閱是由EF設計人員生成的類型。

感謝, 亞當

+0

我不知道第二個查詢是如何工作的 - '.Any'返回一個'bool'。它應該在謂詞的一部分內部。 – RPM1984 2010-12-20 22:37:29

回答

2

更改您的選擇部分以某事像這樣

select new SubscriptionType{ ?,?,?, 
        Subscriptions = a.Subscription.OrderBy(b=>b.?)} 
+0

啊,是的,我甚至沒有考慮使用投影!我會試一試,讓你知道。謝謝 – adamisnt 2010-12-20 22:39:06

+0

我得到一個轉換錯誤:無法將源類型'System.Linq.IOrderedEnumerable 轉換爲類型System.Data.Objects.DataClasses.EntityCollection adamisnt 2010-12-20 22:42:42

+0

Appendig .AsEnumerable()它可能會解決問題! – 2010-12-20 22:49:23

1

您可以更改現有的查詢到這一點,它應該做你要找的東西。

public IQueryable<SubscriptionType> SubscriptionTypesByProperty(string propertyCode) 
{ 
    return from a in db.SubscriptionTypes.Include("Subscriptions") 
      where a.Subscriptions.Any(x => x.PropertyCode == propertyCode) 
      order by a.NumberOfMonths descending 
      select a; 
} 

顯然,如果這是你想要的,降序可能是遞增的。

+0

'a'在這種情況下是SubscriptionType,而NumberOfMonths是訂閱的屬性 – adamisnt 2010-12-20 22:46:21