如何为字典列表创建动态链接
本文关键字:创建 动态 链接 列表 字典 | 更新日期: 2023-09-27 18:06:26
我一直在使用dynamic-linq来过滤对象列表,使用一个简单的Where子句:
public class Employee
{
public int Age = 0;
public string FirstName = "";
}
var list1 = new List<Employee>();
for (int i = 0; i < 100; i++)
{
list1.Add(new Employee()
{
Age = i,
FirstName = "FirstName-" + i
});
}
IQueryable<Employee> queryable1 = list1.AsQueryable();
IQueryable<Employee> result1 = queryable1.Where("Age==3");
上面的代码是工作的,但现在我必须在List of Dictionary上应用相同的逻辑:
public class EmployeeDictionary : Dictionary<string, object>
{
}
var list2 = new List<EmployeeDictionary>();
for (int i = 0; i < 100; i++)
{
var employeeDictionary = new EmployeeDictionary();
employeeDictionary["Age"] = i;
employeeDictionary["FirstName"] = "FirstName-" + i;
list2.Add(employeeDictionary);
}
IQueryable<EmployeeDictionary> queryable2 = list2.AsQueryable();
IQueryable<EmployeeDictionary> result2 = queryable2.Where("Age==3"); //ParseException raised!
IQueryable<EmployeeDictionary> result2 = queryable2.Where("Value.Age==3"); //ParseException raised!
我想一定有一种方法可以告诉dynamic-linq列表项应该如何强制转换,但是我很难找到方法。
我以Employee类为例,以便每个人都能理解,但我使用字典的原因是因为它将从动态sql查询生成的dataReader中填充。where子句也应该是动态的
完全不要使用动态linq,因为您已经在字典中拥有了字段信息,而字典不使用静态查找键。
IQueryable<EmployeeDictionary> result2 = queryable2
.Where(dictionary => object.Equals(dictionary["Age"], 3));