Entity framework 4 EF/LINQ查询中的子集合排序

Entity framework 4 EF/LINQ查询中的子集合排序,entity-framework-4,linq-to-entities,Entity Framework 4,Linq To Entities,在LINQ/EF查询中,我很难确定如何(以及在何处)订购子集合 基本上我有一个SubscriptionTypes集合,每个都有自己的订阅集合。我希望本系列中的每一份订阅书都能在几个月内订购 以下是我当前的查询: public IQueryable<SubscriptionType> SubscriptionTypesByProperty(string propertyCode) { return from a in db.SubscriptionTypes.Inclu

在LINQ/EF查询中,我很难确定如何(以及在何处)订购子集合

基本上我有一个SubscriptionTypes集合,每个都有自己的订阅集合。我希望本系列中的每一份订阅书都能在几个月内订购

以下是我当前的查询:

    public IQueryable<SubscriptionType> SubscriptionTypesByProperty(string propertyCode)
{
    return from a in db.SubscriptionTypes.Include("Subscriptions")
           where a.Subscriptions.Any(x => x.PropertyCode == propertyCode)
           select a;
}
public IQueryable SubscriptionTypesByProperty(字符串属性代码)
{
从db.SubscriptionTypes.Include中的数据库返回(“订阅”)
其中a.Subscriptions.Any(x=>x.PropertyCode==PropertyCode)
选择一个;
}
我想订个月数。我试过这个:

    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;
    }
public IQueryable SubscriptionTypesByProperty(字符串属性代码)
{
从db.SubscriptionTypes.Include中的数据库返回(“订阅”)
其中a.Subscriptions.OrderBy(q=>q.NumberOfMonths).Any(x=>x.PropertyCode==PropertyCode)
选择一个;
}
。。但这并没有正确订购

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

更新:SubscriptionType和Subscription是由EF设计器生成的类型

谢谢,
亚当把你选择的部分改成这样

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

把你选择的部分改成这样

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

您可以将现有查询更改为该查询,它应该满足您的要求

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;
}
public IQueryable SubscriptionTypesByProperty(字符串属性代码)
{
从db.SubscriptionTypes.Include中的数据库返回(“订阅”)
其中a.Subscriptions.Any(x=>x.PropertyCode==PropertyCode)
按a.NumberOfMonths降序
选择一个;
}

显然,如果您想要降序,降序也可以是升序。

您可以将现有查询更改为降序,并且它应该满足您的要求

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;
}
public IQueryable SubscriptionTypesByProperty(字符串属性代码)
{
从db.SubscriptionTypes.Include中的数据库返回(“订阅”)
其中a.Subscriptions.Any(x=>x.PropertyCode==PropertyCode)
按a.NumberOfMonths降序
选择一个;
}

显然,如果你想的话,降序也可以是升序。

我不知道第二个查询是如何工作的-
。任何
都会返回一个
bool
。它应该在where中作为谓词的一部分。我不知道第二个查询是如何工作的-
。Any
返回一个
bool
。它应该在where中作为谓词的一部分。啊,是的,我甚至没有想过使用投影!我试试看,然后告诉你。ThanksI收到一个强制转换错误:无法将源类型“System.Linq.IOrderedEnumerable”转换为类型System.Data.Objects.DataClasses.EntityCollectionNo luck-显然SubscriptionType的Subscriptions属性属于类型EntityCollection,因此我必须找出如何转换为该类型。你已经回答了我原来的问题,因此我将把它标记为答案,然后在必要时再提出另一个问题。谢谢祝你好运,朋友,你可以通过一个序列来初始化EntityCollection。啊,是的,我甚至没有想过使用投影!我试试看,然后告诉你。ThanksI收到一个强制转换错误:无法将源类型“System.Linq.IOrderedEnumerable”转换为类型System.Data.Objects.DataClasses.EntityCollectionNo luck-显然SubscriptionType的Subscriptions属性属于类型EntityCollection,因此我必须找出如何转换为该类型。你已经回答了我原来的问题,因此我将把它标记为答案,然后在必要时再提出另一个问题。谢谢祝你好运,朋友,你可以通过序列来初始化EntityCollection。本例中的“a”是SubscriptionType,而NumberOfMonths是SubscriptionType的属性。本例中的“a”是SubscriptionType,而NumberOfMonths是Subscription的属性