Mat*_*ttE 3 c# linq asp.net filtering
我需要针对包含多个可选参数的返回列表编写 LINQ 查询。将有以下变量:
计划、ID、名字、姓氏、DateFrom、DateTo、MemDateOfBirth
我想使用这些参数通过 LINQ 返回一个过滤列表,但它们都是可选的。当用户点击搜索按钮时,至少会提供一个,但这将由用户决定他们想要搜索的内容。如果他们提供超过 1 个,我需要按他们提供的所有方法进行过滤...
因此,例如,如果他们提供名字和起止日期,我想通过起止日期之间的名字返回一个人的所有实例的过滤列表,等等......
使用 LINQ 完成此任务的最简单方法是什么?这些变量是可选参数,因此可以提供其中的任何一个或全部。我知道我可以返回主列表,然后多次过滤它以获得结果,但我想知道是否有一种更快、更简单的方法来通过 LINQ 来做到这一点......
在此先感谢您的帮助!
我发现这是解决此类问题的最简单方法
var q = from mt in myTable
where (mt.FIrstname == FirstNameparam || FirstNameparam == null)
&& (mt.lastname == lastnameParam || lastnameParam == null)
&& (mt.DateField == DateParam || DateParam == null)
select new
{
mt.FIrstname,
mt.lastname,
mt.DateField
};
Run Code Online (Sandbox Code Playgroud)
您可以使用EntityFramework.DynamicFilters,它允许您创建动态过滤器,或者您可以在linq中动态创建where子句。这是如何动态创建 where 子句的精彩教程。
https://www.codeproject.com/Tips/582450/Build-Where-Clause-Dynamically-in-Linq
这个过滤器的创建有点乏味,但这将满足您的目的。