【问题标题】:Multiple Sorting on LINQ (nested) methodLINQ(嵌套)方法的多重排序
【发布时间】:2009-10-07 19:57:00
【问题描述】:

我有以下 LINQ 方法,它从 User Control 调用并直接转储到标准 DataGridView。我的用户希望它默认排序,首先是DisenrollmentDate,然后是Member Name。现在,使用下面的代码,它仅按DisenrollmentDate 排序。


BLLCmo.cs

    public static DataTable GetAllMembers(Guid workerID)
    {
        var AllEnrollees = from enrollment in context.tblCMOEnrollments
                               where enrollment.CMOSocialWorkerID == workerID || enrollment.CMONurseID == workerID
                               join supportWorker in context.tblSupportWorkers on enrollment.EconomicSupportWorkerID equals supportWorker.SupportWorkerID into workerGroup
                               from worker in workerGroup.DefaultIfEmpty()
                               orderby enrollment.DisenrollmentDate ascending 
                               select new
                                       {
                                           enrollment.ClientID,
                                           MemberName = BLLConnect.MemberName(enrollment.ClientID),
                                           NurseName = BLLAspnetdb.NurseName(enrollment.CMONurseID),
                                           SocialWorkerName =BLLAspnetdb.SocialWorkerName(enrollment.CMOSocialWorkerID),
                                           enrollment.DisenrollmentDate,
                                           enrollment.EnrollmentDate,
                                           ESFirstName = worker.FirstName,
                                           ESLastName = worker.LastName,
                                           ESPhone = worker.Phone
                                       };

        var dataTable = AllEnrollees.CopyLinqToDataTable();

        return dataTable;
    }

BLLConnect.cs

    public static String MemberName(Int32 personID)
    {
        var memberName = from person in context.tblPersons
                         where person.PersonID == personID
                         orderby person.LastName ascending 
                         select person.FirstName + " " + person.LastName;

        return memberName.SingleOrDefault();
    }

【问题讨论】:

    标签: c# .net linq linq-to-sql sorting


    【解决方案1】:

    您可以在orderby 语句中添加更多排序子句,以逗号分隔。

        public static DataTable GetAllMembers(Guid workerID)
        {
            var AllEnrollees = from enrollment in context.tblCMOEnrollments
                                   where enrollment.CMOSocialWorkerID == workerID || enrollment.CMONurseID == workerID
                                   join supportWorker in context.tblSupportWorkers on enrollment.EconomicSupportWorkerID equals supportWorker.SupportWorkerID into workerGroup
                                   from worker in workerGroup.DefaultIfEmpty()
                                   let memberName = BLLConnect.MemberName(enrollment.ClientID)
                                   orderby enrollment.DisenrollmentDate ascending, memberName ascending
                                   select new
                                           {
                                               enrollment.ClientID,
                                               MemberName = memberName,
                                               NurseName = BLLAspnetdb.NurseName(enrollment.CMONurseID),
                                               SocialWorkerName =BLLAspnetdb.SocialWorkerName(enrollment.CMOSocialWorkerID),
                                               enrollment.DisenrollmentDate,
                                               enrollment.EnrollmentDate,
                                               ESFirstName = worker.FirstName,
                                               ESLastName = worker.LastName,
                                               ESPhone = worker.Phone
                                           };
    
            var dataTable = AllEnrollees.CopyLinqToDataTable();
    
            return dataTable;
        }
    

    请注意,我使用 let 关键字提取了一次 memberName,然后将其用于排序和返回值。

    【讨论】:

    • 这似乎可行。谢谢!!!不幸的是,它对我来说在CopyLinqToDataTable 部分引发了异常......我应该完全使用DataTables:\
    • 无论我做什么,当我将结果分配给 DataGridView 的 DataSource 时,它​​都会抛出这个异常--> Method 'System.String MemberName(Int32)' has no supported translation to SQL.
    • 是的,但这是一个不同的问题。基本上,它告诉您它无法将包含方法调用的表达式树转换为 T-SQL。尝试将该表达式内联到查询中。
    • 是的,我觉得它是分开的。感谢您解决第一个问题。现在开始研究查询中的衬里表达式
    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多