LINQ“。包含”在子查询中的orderby

时间:2009-07-20 20:23:37

标签: linq-to-entities

我有以下实体代码,它返回所有用户并“包含”他们的所有样本请求:

    var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                           orderby u.LastName ascending
                           select u;

每个用户都有多个SampleRequests。每个SampleRequest都有一个ID#(只是一个整数:1,22,341等)。上面的LINQ to实体抓住用户及其SampleRequests,如下所示:

用户1:33,22,341,12

User2:24,3,881

正如您所看到的,SampleRequest ID#不是按升序排列的。我希望结果有序。

如何将orderby约束放在Included SampleRequests ID#

请注意:SampleRequestId是SampleRequest的属性...不是User对象的属性

3 个答案:

答案 0 :(得分:8)

我现在可以想到你想要的两种选择。您可以将它们选择到新类中,其中用户和关联的请求是属性:

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                orderby u.LastName ascending
                select new
                {
                    User = u,
                    SampleRequests = u.SampleRequests.OrderByDescending(r => r.SampleRequestId)
                };

如果您想要返回此类型,则会导致问题,因为它是匿名的。

您也可以将其选择为新的用户对象,类似于:

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                orderby u.LastName ascending
                select new User
                {
                    Property1 = u.Property1,
                    Property2 = u.Property2,
                    Property3 = u.Property3,
                    SampleRequests = u.SampleRequests.OrderByDescending(r => r.SampleRequestId).ToList()
                };

这将返回User对象的集合,但更新数据库中的对象可能会导致问题。

答案 1 :(得分:-1)

只需在orderby中添加另一个排序参数:

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                           orderby u.LastName ascending, 
                                   u.SampleRequestId descending
                           select u;

答案 2 :(得分:-2)

编辑:Treed by< 15秒。

var userQuery = from u in _IntranetContext.UserSet.Include("SampleRequests")
                orderby u.LastName ascending, u.SampleRequestId descending
                select u;