动态属性的动态linq

时间:2013-03-25 10:58:13

标签: c# linq dynamic

任何人都可以帮助我:

我有动态(ExpandoObject)属性的poco对象的集合,它需要是动态linq中字符串条件的一部分

离。

public class Test
{
   public int Id {get;set;}
   dynamic DynamicProperty {get;set;}
}

动态属性(ExpandoObject)有一个属性(IdName

如何使用动态Linq过滤Test对象的集合,(如何看起来像字符串的条件?):

IList<Test> testList;

testList.AsQueryable()
        .Where("DynamicProperty.Id == 2 or DynamicProperty.Name == "test"")

3 个答案:

答案 0 :(得分:0)

Dynamic LINQ 提供了一个小的可重用库,它支持字符串谓词(和查询语言)来构建动态LINQ语句。

Download Link

答案 1 :(得分:0)

将Wheres链接到相同的IQueryable上以构建一个完整的表达式树,然后可以使用ToList实现:

IList<string> testList = new List<string>() {"One", "Two", "Three", "Four", "Five"};

var filteredList = testList.AsQueryable().Where((s) => s.Length <= 4);
filteredList = filteredList.Where((s) => s[0].Equals('F'));

var results = filteredList.ToList();

答案 2 :(得分:0)

thanx guys,但我的where条件必须是一个字符串,它将在动态where子句中使用,就像我发布的示例一样。复杂属性(DynamicProperty)是未知类型,必须像过滤器一样在示例中使用。我使用了ExpandoObject但是上面的语法(.Where("DynamicProperty.Id == 2 or DynamicProperty.Name == "test""))有问题。因为该字符串结构必须与此.Where("DynamicProperty["Id"] == 2 or DynamicProperty["Name"] == "test""))类似,并且因为Expando具有IDictionary<string, object>结构,所有值必须是显式转换,最终过滤器是:.Where(Convert.ToInt32("DynamicProperty["Id"]) == 2 or DynamicProperty["Name"].ToString() == "test""))这比第一个更复杂。

如上例所示,如何解决问题有字符串过滤器

"DynamicProperty.Id == 2 or DynamicProperty.Name == "test""