如何为字典列表创建动态链接

本文关键字:创建 动态 链接 列表 字典 | 更新日期: 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));