2013-03-25 49 views
1

谁能帮我这个:动态LINQ

我有一个动态(ExpandoObject)财产POCO对象的集合,需要加以串条件的一部分在动态LINQ

前。

​​

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

如何才能筛选使用动态LINQ的测试对象的集合,(应该怎么样子字符串,其中条件?):

IList<Test> testList; 

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

字符串过滤器转换的ExpandoObject到词典您LINQ,然后链子的字典另一个过滤器。 – zsong 2013-03-25 15:32:55

回答

0

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

Download Link

+0

动态Linq库在上述示例中属性声明为动态的示例中不起作用。 – 2016-12-30 16:37:55

0

链上相同的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(); 
+0

thanax球员,但我的where条件必须是一个字符串,它将在动态where子句中使用,就像我发布的示例中 – user596107 2013-03-25 21:12:08

0

感谢名单的家伙,但我在那里的条件必须是一个字符串,将在动态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""