我一直在使用dynamic来使用一个简单的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");上面的代码正在工作,但现在我必须对字典列表应用相同的逻辑:
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子句也应该是动态的。
发布于 2015-08-04 20:26:18
只是根本不要使用dynamic,因为字典中已经有字段信息,字典不使用其键的静态查找。
IQueryable<EmployeeDictionary> result2 = queryable2
.Where(dictionary => object.Equals(dictionary["Age"], 3));https://stackoverflow.com/questions/31818603
复制相似问题