首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dynamic linq on Dynamic properties

Dynamic linq on Dynamic properties
EN

Stack Overflow用户
提问于 2013-03-25 18:58:13
回答 3查看 2K关注 0票数 2

有没有人能帮我:

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

例如。

代码语言:javascript
复制
public class Test
{
   public int Id {get;set;}
   dynamic DynamicProperty {get;set;}
}

动态属性(ExpandoObject)具有属性(IdName)

如何使用动态Linq过滤Test对象的集合(字符串where条件应该是什么样子的?):

代码语言:javascript
复制
IList<Test> testList;

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

回答 3

Stack Overflow用户

发布于 2013-03-25 23:32:00

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

Download Link

票数 0
EN

Stack Overflow用户

发布于 2013-03-25 23:57:36

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-03-26 05:26:47

感谢各位,但我的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"")),它比第一个过滤器更复杂。

如何解决像上面这样的字符串过滤器问题

代码语言:javascript
复制
"DynamicProperty.Id == 2 or DynamicProperty.Name == "test""
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15613234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档