1
  1. Where sortColumn is the name of column (string) want to sort.
  2. sortColumnDir is asc or desc oreder.

    var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault();
    
    var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();
    var modal = _repo.GetAllResturents();
    
    var RestaurantData = (from tempcustomer in modal
                          select tempcustomer);
    
    //Sorting    
    //RestaurantData = RestaurantData.OrderBy(sortColumn);
    
    if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir)))
    {
        RestaurantData = RestaurantData.OrderBy(sortColumn + " " + sortColumnDir);
    
    }
    

    i am getting Argument null exception. Note : RestaurantData = RestaurantData.OrderBy(s=>s.Name); is working as expected but does not serve my purpose here. i want to sort on the basic of sortColumn (column name). Please Suggest some better approach for this scenario.

Ehsan Sajjad
  • 59,154
  • 14
  • 90
  • 146
  • 2
    `RestaurantData.OrderBy(sortColumn + " " + sortColumnDir)` is not a proper way to perform sort ordering. Consider using `Select` then using `OrderBy` and `ThenBy`. – Tetsuya Yamamoto Jan 15 '19 at 08:17
  • 1
    If statement will hit if sortColumnDir is null or empty. – MaticDiba Jan 15 '19 at 08:18
  • 1
    Also worth to read: https://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet-iqueryablet. What you want to use actually called "dynamic LINQ", which requires `System.Linq.Dynamic` namespace. – Tetsuya Yamamoto Jan 15 '19 at 08:30
  • @TetsuyaYamamoto it is working fine using System.Linq.Dynamic but why it is not a proper way to perform sort ordering. as i am using Linq so writing Select make any performance benefits? – Shani Bhati Jan 15 '19 at 08:55
  • By using standard `OrderBy` I could tell that's not proper way because `System.Linq.OrderBy()` extension method requires lambda expression rather than string concatenation. The `System.Linq.Dynamic.OrderBy()` accepts string as parameter, hence just use proper library before using extension methods. – Tetsuya Yamamoto Jan 15 '19 at 09:00
  • The error is rather clear. If you *debug* this, you'll probably see that one of the column names is `null`. Your check returns true only if *both* strings are null. `OrderBy` doesn't work with constant values like the one you passed anyway. It expects a *lambda* that is used to generate the order key – Panagiotis Kanavos Jan 15 '19 at 13:36

0 Answers0