2

谁能帮我这个:

我收集了具有动态(ExpandoObject)属性的 poco 对象,该属性需要成为动态 linq 中字符串条件的一部分

前任。

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

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

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

IList<Test> testList;

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

3 回答 3

0

thanx 伙计们,但我的 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""
于 2013-03-25T21:26:47.463 回答
0

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

下载链接

于 2013-03-25T15:32:00.157 回答
0

在同一个 IQueryable 上链接 Wheres 以构建完整的表达式树,然后可以使用 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();
于 2013-03-25T15:57:35.650 回答