gpt4 book ai didi

c# - 使用 linq 和 Entityframework 实现高级搜索的最佳实践

转载 作者:行者123 更新时间:2023-11-30 20:34:59 25 4
gpt4 key购买 nike

我正在尝试根据 10 个参数使用 LINQ 和 Entity Framework 在我的应用程序中构建高级搜索,但用户可以发送一个或多个参数进行搜索。我厌倦了像下面这样实现它,但它没有工作,而不是创建 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 Filter 作为参数。

关于c# - 使用 linq 和 Entityframework 实现高级搜索的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com