首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IQueryable.Where()的Linq动态参数

IQueryable.Where()的Linq动态参数
EN

Stack Overflow用户
提问于 2009-06-03 19:48:33
回答 1查看 2.9K关注 0票数 1

在开始之前,我要说我作为一名C#开发人员已经进入了第8天。

对于我正在工作的项目中的一些DomainModels,我需要能够过滤表中的所有记录,给定用户在审查/搜索表单中提交的内容。

目前的2美分短途游是:

表单提交给FooController/review。

然后,Review从参数‘’filter‘中获取所有键/值对到字典中,并将其传递给助手类调用FooFinder.ByProperties,它看起来非常类似:

代码语言:javascript
运行
复制
public IQueryable<WorkPlan> ByProperties( IDictionary<string, string> properties)
    {            

        var result = ForSite(Convert.ToInt64(properties.DefaultVal("SiteId", "0")));

        v);

        if(properties.ContainsKeyAndIsNotNullOrEmpty("WorkPlan.Key"))
        {
            var tempVal = Convert.ToInt64(properties["WorkPlan.Key"]);
            result = result.Where(r => r.Id == tempVal);
        }
        // Multiple of these conditional checks follows
       return result;

}

我想尽可能地减少重复的代码,并尝试像这样的东西

代码语言:javascript
运行
复制
result = ByProperty(properties, "WorkPlan.key", typeof (Int64), r, v => r.id == v);

但这显然是行不通的,原因有很多。尽管如此,我想要实现的目标仍然存在。我真的很想通过使用某种动态帮助器/实用程序来简化代码并加快过滤过程。

我尝试过的另一个想法是使用反射,然后是如何检查像CreatedDatime属性这样的东西,我希望所有的记录都大于“r => CreatedDatetime > CreatedFrom”。

如果所有这些都没有意义,请评论,我将尝试澄清任何问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-03 21:16:52

您所询问的内容可以是自动化的,但这是相当多的工作,并且需要了解Expression应用编程接口。这是一个相当高级的话题。

我可能会保留代码“原样”...dry很好,但“不要破坏工作代码”是另一句值得了解的格言……

或者,您可能想要查看Dynamic LINQ Library -这可能会帮助您实现自动化。但老实说,现有的代码并没有那么难看...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/946792

复制
相关文章

相似问题

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