我正在尝试使用 LINQ 和 Entity Framework 在我的应用程序中构建高级搜索,具体取决于 10 个参数,但用户可以发送一个或多个参数进行搜索。我厌倦了像下面的方式实现它,但它不起作用,而不是制定 if 条件并更改每次检查的查询。
那么有没有什么简单的方法可以使用LINQ根据用户输入来选择匹配结果呢?
var data = (from item in db.Student
where item.Firstname == fname
&& item.Middlename == mname
&& item.Lastname == lname
&& item.Birthday == birthday
&& item.Age == age
&& item.AdmissionYear == year
&& item.Grade == grade
&& item.Address == Address
&& item.Class == class
&& item.Number == number
select item).FirstOrDefault();
最佳答案
实现这一点的简单方法是使用where子句链接的形式。与表达式树相比,我一直更喜欢这种方法,因为它简单明了。
假设所有谓词值都可以为空,下面是一个示例:
var query = db.Student.AsQueryable();
if (age != null)
query = query.Where(s => s.Age == age.Value);
if (fname != null)
query = query.Where(s => s.Firstname == fname);
if (lname != null)
query = query.Where(s => s.Lastname == lname);
// etc...
var student = query.FirstOrDefault();
通过这种方式,您可以仅使用用户传入的属性来动态构建 where 子句,而忽略其余属性。
您还可以在新的Filter对象中定义所有参数,并将这些“if”语句提取到它们自己的FilterStudents方法中,该方法采用IQueryable
关于c# - 使用 linq 和 Entityframework 实现高级搜索的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542363/