c语言中的where用法,C语言中的动态Where子句lambdas

该博客探讨了如何在C#中根据用户选择动态地构造Lambda表达式,以在Entity Framework的数据查询中实现不同条件的过滤。作者希望通过避免大量的if语句或switch语句,来创建一个通用的方法,该方法能够接受属性引用、比较操作和搜索值,并生成适用于Where子句的Predicate。提出了使用DynamicLinq库作为可能的解决方案,允许通过字符串构建查询条件。
摘要由CSDN通过智能技术生成

我有一个看起来像这样的搜索表单:

表单背后的代码如下所示:

@using (Html.BeginForm())

{

@Html.ValidationSummary()

@Html.DropDownList("SelectedType", Model.TypeOptions)

@Html.DropDownList("SelectedSearch", Model.SearchOptions)

@Html.TextBoxFor(x => x.SearchTerm)

}

我想要做的是从返回选项动态构造一个lambda where子句.例如.如果用户选择“Process No”和“Contains”,那么lambda会是这样的

model.DataSource = _db.InstrumentLists.Where(x => x.Process_No.Contains(SearchTerm));

或者,如果用户选择“PLC No”和“Equals”,那么lambda看起来就像

model.DataSource = _db.InstrumentLists.Where(x => x.PLC_No == SearchTerm);

我试图这样做,同时避免大案例陈述或if堆栈,即我不想要以下内容:

if (SelectedType == "Process No" And SelectedSearch = "Contains")

model.DataSource = _db.InstrumentLists.Where(x => x.Process_No.Contains(SearchTerm));

elseif (SelectedType == "Process No" And SelectedSearch = "Equals")

model.DataSource = _db.InstrumentLists.Where(x => x.Process_No == SearchTerm);

...

本质上我想传递一个类属性的引用,一些指定测试类型(即包含,等于,开始等)和一个函数的搜索项,或沿着这些行的东西,并返回一个谓词放置进入我的Where子句.我希望这个函数动态工作,所以我不必为每个属性和测试类型的组合修改它.

这是可能的,还是使用字符串谓词参数的唯一方法?

编辑:如果它很重要,我使用EF作为我的数据模型,所以_db.InstrumentLists返回一个ObjectSet< InstrumentList>.

解决方法:

你有两个选择:

>制作一个基于“切换”的搜索方法,即根据用户选择的值执行不同的Where并返回一个DataSource

>使用Dynamic Linq并从字符串构造Where

编辑 – 动态Linq的示例:

model.DataSource = _db.InstrumentLists.Where(SelectedType + " == @0", SearchTerm);

标签:c,net,lambda

来源: https://codeday.me/bug/20190626/1294515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值