任何人都可以帮助我:
我有动态(ExpandoObject)属性的poco对象的集合,它需要是动态linq中字符串条件的一部分
离。
public class Test
{
public int Id {get;set;}
dynamic DynamicProperty {get;set;}
}
动态属性(ExpandoObject
)有一个属性(Id
和Name
)
如何使用动态Linq过滤Test对象的集合,(如何看起来像字符串的条件?):
IList<Test> testList;
testList.AsQueryable()
.Where("DynamicProperty.Id == 2 or DynamicProperty.Name == "test"")
答案 0 :(得分:0)
Dynamic LINQ 提供了一个小的可重用库,它支持字符串谓词(和查询语言)来构建动态LINQ语句。
答案 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""