2014-04-18 42 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