2014-04-18 99 views
0

我使用的是在NHibernate中LINQ和我有问题,当我尝试使用排序依据使用动态的LINQ:LINQ的LET和动态的LINQ排序依据

 var bugAndFeatures = (from u in session.Query<BugAndFeature>() 
           let uEmployeeFullName = string.Format("{0} {1}", u.Employee.Surname, u.Employee.FirstName) 
           where u.IsDelete == false 
           select new BugAndFeatureView() 
           { 
            Id = u.Id, 
            Title = u.Title, 
            Description = u.Description, 
            EmployeeFullName = uEmployeeFullName, 
            EmployeeLogin = u.Employee.User.Login, 
            AssignedEmployeeId = u.AssignedEmployee == null ? 0 : u.AssignedEmployee.Id, 
            AssignedEmployeeFullName = string.Format("{0} {1}", u.AssignedEmployee.Surname, u.AssignedEmployee.FirstName), 
            CreateDate = u.CreateDate.Equals(null) ? string.Empty : u.CreateDate.ToString(), 
            LastUpdateDate = u.LastUpdateDate.Equals(null) ? string.Empty : u.LastUpdateDate.ToString() 
           } 
        ); 

之后,我想用动态的LINQ,并使用排序依据像OrderBy(“EmployeeFullName DESC”),我不能这样做,因为我有例外。 我注意到,当我在任何属性上进行OrderBy时,我没有格式化或检查null等。我没有这个问题,它只发生在我尝试使用格式属性进行orderby时发生。 如果我在OrderBy之前做了ToList(),那么我没有这个问题,但我不想这样做,我需要使用IQueryable。

如何修改此查询来解决我的问题?

感谢您的帮助。

+0

看一看http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet – Thewads

回答

0

你有没有尝试这样的:

var Results = bugAndFeatures.ToList().OrderBy(p => p.EmployeeFullName); 

IQueryable<Foo> query = ...; 

switch (orderByParameter) 
       { 
        case "SomeValueParamter": 
         query = query.OrderBy(x => x.SomeValueParamter); 
         break; 
        case "SomeValueParamter": 
         query = query.OrderBy(x => x.SomeValueParamter); 
         break; 
        // etc 
       } 
+0

我不想做ToList 在这一步我需要IQueryable ,我也需要使用动态LINQ。 – hashiQ

+0

我试图使用扩展方法,而不使用动态LINQ,但我仍然有同样的问题 - 我认为计算属性做这个问题(正如我提到,当我使用OrderBy使用扩展方法或动态LINQ我有属性相同的问题我格式化,检查某些东西或计算) – hashiQ