在EF / LINQ查询中排序子集合

时间:2010-12-20 22:25:13

标签: entity-framework-4 linq-to-entities

我无法弄清楚如何(以及在​​何处)在LINQ / EF查询中订购子集合。

基本上我有一组SubscriptionTypes,每个都有自己的订阅集合。我希望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;
    }

..但是没有正确订购订阅。

有人知道一种简单的方法吗?

更新:SubscriptionType和Subscription是EF设计者生成的类型。

谢谢, 亚当

2 个答案:

答案 0 :(得分:2)

将您的选择部分更改为......

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

答案 1 :(得分: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;
}

显然,如果你想要的话,下降可能会提升。