Order by a field (int). If the field it is not int?

前端 未结 3 1749
执念已碎
执念已碎 2021-01-25 19:44

I have a problem with LINQ (in C#). I need to order a list of records by a field, which should be int, but sometimes not :

from MyObject obj in new          


        
相关标签:
3条回答
  • 2021-01-25 20:06

    Try by maming use of TryParse

    int myInt;                
    from obj in MYobjects
             where obj.Visibile=="1" 
             orderby  (int.TryParse(Str, out myInt) ?  myInt: 0 )
             select obj;
    

    OR

    MYobjects.OrderBy(r => Number(r.str);
     //private function 
    int Number(string str) 
    { 
            int result_ignored;
            if (int.TryParse(str,out result_ignored))
               return result_ignored;
    
            else 
               return 0;
     }
    
    0 讨论(0)
  • 2021-01-25 20:09

    If it is possible try adding a column in database IsInteger which stores if the order is integer or not at time of Insert.

    So, it will be easy to get and sort integer and non-integer orders.

    0 讨论(0)
  • 2021-01-25 20:23

    Do not use Int32.Parse, but use a method you create yourself that uses Int32.TryParse to try to parse the int. If it succeeds, return the number found, if it fails return Int32.MaxValue to get that at the end.

    from MyObject obj in new MyObject()
    where obj.Visibile=="1"
    orderby TryParse(obj.Order) ascending
    select obj;
    
    
    public int TryParse(string value)
    {
      int val;
      if (Int32.TryParse(value, out val))
          return val;
    
      return Int32.MaxValue;
    }
    
    0 讨论(0)
提交回复
热议问题