C#动态linq按Expando对象排序

沙市

我有一种情况,我需要根据数据库表的升序或降序对配置进行动态排序

我的数据库表具有列名,我将需要对其进行排序和排序。

我有一个对象列表,其中每个对象都有一个ExpandoObject。

我的班级看起来像这样

  public class Customer: Base {
    public string Name { get; set;}
    public string City { get; set;}
    public string Address { get; set;}
    public string State { get; set;}
    public int Id { get; set;}
    public DateTime Dob { get; set;}
    public int Age{ get; set;}
    public dynamic custom = new ExpandoObject();
 } 

客户类具有一个ExpandoObject,以存储其他属性(也称为自定义属性),每个客户都可以配置这些属性。

我有一个表,该表具有用于排序的配置,它具有列名称和排序顺序,例如

ColName     SortOrder

City        Asc
Name        Desc
custom_XYZ  Asc   //this means this is a custom column 

所有以custom_(Property Name)开头的列名都存储在expando对象中,而后者又是一个字典。

现在我正在使用以下代码来执行动态linq订单

var sortList; // this list has the sorting list with type {string:ColName: bool:Asc}
var customers; //holds the list of customer objects with custom fields in expando

var col = sortList[0];
var propertyInfo = typeof(Student).GetProperty(col.ColName);    
var sortedData= customers.OrderBy(x => propertyInfo.GetValue(x, null));

for(int i = 1; i<sortList.Count()-1;i++){
  var col1 = sortList[i];
  var prop = typeof(Student).GetProperty(col1.ColName); 
  if(col1.asc)   
    sortedData = sortedData.ThenBy(n => param2.GetValue(n, null));
  else
    sortedData = sortedData.ThenByDescending(n => param2.GetValue(n, null));
}

有人可以帮助我如何对类型为ExpandoObject的自定义对象中的数据进行排序。

ExpandoObject实际上在内部将属性包装为Dictionary,因此有人可以帮助我如何根据与Key(即columnName)相对应的Dictionary的值对整个对象进行排序

Xanatos

您可以尝试以下方法:

public static IOrderedEnumerable<Customer> OrderByCustomer(IEnumerable<Customer> enu, Column column)
{
    Func<Customer, object> selector;

    if (!column.ColName.StartsWith("custom_"))
    {
        var propertyInfo = typeof(Customer).GetProperty(column.ColName);
        selector = x => propertyInfo.GetValue(x, null);
    }
    else
    {
        selector = x =>
        {
            object obj;
            ((IDictionary<string, object>)x.custom).TryGetValue(column.ColName.Substring("custom_".Length), out obj);
            return obj;
        };
    }

    IOrderedEnumerable<Customer> ordered = enu as IOrderedEnumerable<Customer>;

    if (ordered == null)
    {
        if (column.SortOrder == SortOrder.Asc)
        {
            return enu.OrderBy(selector);
        }
        else
        {
            return enu.OrderByDescending(selector);
        }
    }

    if (column.SortOrder == SortOrder.Asc)
    {
        return ordered.ThenBy(selector);
    }
    else
    {
        return ordered.ThenByDescending(selector);
    }
}

像这样使用它:

var sortedList = new[] { 
    new Column { ColName = "Name", SortOrder = SortOrder.Asc },
    new Column { ColName = "custom_Secret", SortOrder = SortOrder.Asc },
};

var col = sortedList[0];

var sortedData = OrderByCustomer(customers, sortedList[0]);

for (int i = 1; i < sortedList.Length; i++)
{
    sortedData = OrderByCustomer(sortedData, sortedList[i]);
}

var result = sortedData.ToArray();

请注意,您OrderByCustomer在第一个排序(使用OrderBy/ OrderByDescending)和其他子排序(在使用ThenBy/ ThenByDescending)中使用my

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#:按可以为空的DateTime属性对对象列表进行排序

来自分类Dev

C#,按字母顺序对LINQ结果进行排序,然后根据搜索键对它进行排序

来自分类Dev

按降序对SortedList进行排序C#

来自分类Dev

在C#中从JSON对象转换为Expando对象

来自分类Dev

引用C#“动态”对象的动态成员

来自分类Dev

在LINQ C#中按Rollno文本排序?

来自分类Dev

在C#中,如何按对象的多个字段对对象集合进行排序?

来自分类Dev

c#按对象的属性对对象列表进行排序

来自分类Dev

按集合属性对动态LINQ排序

来自分类Dev

如何在C#中按一定条件按属性对对象列表<t>进行排序

来自分类Dev

C#动态linq按Expando对象排序

来自分类Dev

动态创建C#对象

来自分类Dev

按单词对C#列表进行排序

来自分类Dev

在Asp.net C#中使用linq按升序和降序对list <object>进行排序

来自分类Dev

C#,按字母顺序对LINQ结果进行排序,然后根据搜索键对它进行排序

来自分类Dev

C#:按可为空的DateTime属性对对象列表进行排序

来自分类Dev

按降序对SortedList进行排序C#

来自分类Dev

按条款动态排序

来自分类Dev

按集合属性对动态LINQ排序

来自分类Dev

使用linq按相似性对对象进行排序

来自分类Dev

按属性对对象列表进行排序 C#(自定义排序顺序)

来自分类Dev

如何使用 LINQ 在 C# 中按降序对嵌套字典进行排序

来自分类Dev

C# 按名称和坐标对对象列表进行排序

来自分类Dev

C# - 如何按 linq 对列表字符串编号进行排序?

来自分类Dev

C# 按对象类型对对象数组进行排序(Icomparable?)

来自分类Dev

按 len() 排序,但在 linq 中使用 c#

来自分类Dev

动态对象引用 C#

来自分类Dev

C#如何按任何属性对对象列表进行排序

来自分类Dev

C# - 按对象的多个属性排序

Related 相关文章

  1. 1

    C#:按可以为空的DateTime属性对对象列表进行排序

  2. 2

    C#,按字母顺序对LINQ结果进行排序,然后根据搜索键对它进行排序

  3. 3

    按降序对SortedList进行排序C#

  4. 4

    在C#中从JSON对象转换为Expando对象

  5. 5

    引用C#“动态”对象的动态成员

  6. 6

    在LINQ C#中按Rollno文本排序?

  7. 7

    在C#中,如何按对象的多个字段对对象集合进行排序?

  8. 8

    c#按对象的属性对对象列表进行排序

  9. 9

    按集合属性对动态LINQ排序

  10. 10

    如何在C#中按一定条件按属性对对象列表<t>进行排序

  11. 11

    C#动态linq按Expando对象排序

  12. 12

    动态创建C#对象

  13. 13

    按单词对C#列表进行排序

  14. 14

    在Asp.net C#中使用linq按升序和降序对list <object>进行排序

  15. 15

    C#,按字母顺序对LINQ结果进行排序,然后根据搜索键对它进行排序

  16. 16

    C#:按可为空的DateTime属性对对象列表进行排序

  17. 17

    按降序对SortedList进行排序C#

  18. 18

    按条款动态排序

  19. 19

    按集合属性对动态LINQ排序

  20. 20

    使用linq按相似性对对象进行排序

  21. 21

    按属性对对象列表进行排序 C#(自定义排序顺序)

  22. 22

    如何使用 LINQ 在 C# 中按降序对嵌套字典进行排序

  23. 23

    C# 按名称和坐标对对象列表进行排序

  24. 24

    C# - 如何按 linq 对列表字符串编号进行排序?

  25. 25

    C# 按对象类型对对象数组进行排序(Icomparable?)

  26. 26

    按 len() 排序,但在 linq 中使用 c#

  27. 27

    动态对象引用 C#

  28. 28

    C#如何按任何属性对对象列表进行排序

  29. 29

    C# - 按对象的多个属性排序

热门标签

归档