具有多个可选参数的 LINQ 过滤器查询

Mat*_*ttE 3 c# linq asp.net filtering

我需要针对包含多个可选参数的返回列表编写 LINQ 查询。将有以下变量:

计划、ID、名字、姓氏、DateFrom、DateTo、MemDateOfBirth

我想使用这些参数通过 LINQ 返回一个过滤列表,但它们都是可选的。当用户点击搜索按钮时,至少会提供一个,但这将由用户决定他们想要搜索的内容。如果他们提供超过 1 个,我需要按他们提供的所有方法进行过滤...

因此,例如,如果他们提供名字和起止日期,我想通过起止日期之间的名字返回一个人的所有实例的过滤列表,等等......

使用 LINQ 完成此任务的最简单方法是什么?这些变量是可选参数,因此可以提供其中的任何一个或全部。我知道我可以返回主列表,然后多次过滤它以获得结果,但我想知道是否有一种更快、更简单的方法来通过 LINQ 来做到这一点......

在此先感谢您的帮助!

bor*_*per 7

我发现这是解决此类问题的最简单方法

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)


Raj*_*put 0

您可以使用EntityFramework.DynamicFilters,它允许您创建动态过滤器,或者您可以在linq中动态创建where子句。这是如何动态创建 where 子句的精彩教程。

https://www.codeproject.com/Tips/582450/Build-Where-Clause-Dynamically-in-Linq

这个过滤器的创建有点乏味,但这将满足您的目的。