我有困难的时刻需要按特定列排序网格。
当我在网格中单击时,真正的问题仍然存在,一个带有列名的查询字符串被传递。
我需要将每个网格的每个列名映射到一个 lambda 表达式,以传递给将由实体框架解析器调度的查询并返回排序的数据。
我真正喜欢的是一个创建动态 lambda 表达式或基本上是成员调用(属性)的类 - 通过指向属性/列名或添加到主查询的反射以某种方式创建表示订单表达式的节点,并且返回 IQueryable,并将节点添加到我的全局 IQueryable 查询中。
想象一个有 10 个学生的学生网格。
|id||名称||createdAt|注释|
我想按说明订购。
我必须有类似的东西
public static class StudentPropertyMapper
{
static Dictionary<string, Func<IQueryable<Student>, IOrderedQueryable<Student>>> s_mapper = new Dictionary<string, Func<IQueryable<Student>, IOrderedQueryable<Student>>>();
static StudentPropertyMapper()
{
s_mapper.Add("Notes", q => q.OrderBy(e => e.notes));
}
public static IOrderedQueryable<Student> OrderedQuery(string columnName, IQueryable<Student> Student)
{
return s_mapper[columnName](Student);
}
}
并且基本上基于columnName将订单节点添加到我的全局查询中,但我需要为每个属性进行每个映射。
有一些全局方法可以创建 lambda 表达式的那部分,它根据 columnName 的名称创建 lambda,该名称基本上表示该类型属性的调用?
赞赏。