asp.net – 构建动态LINQ查询的最佳方法
发布时间:2020-05-24 12:52:06 所属栏目:asp.Net 来源:互联网
导读:您好我正在寻找编写动态LINQ查询的最佳方法. 我有一个像这样的功能 public IQueryableStudent FindByAllStudents(int? id, string Name, int? CourseID, bool? IsActive) // like this way, all field values are passed { //
|
您好我正在寻找编写动态LINQ查询的最佳方法. 我有一个像这样的功能 public IQueryable<Student> FindByAllStudents(int? id,string Name,int? CourseID,bool? IsActive) // like this way,all field values are passed
{
// code for compairision
return db.Student;
}
我们也可以写db.Students.where(谓词) 要么 像这样的查询 var students = from s in db.students where s.Name.Contains(Name)
s.ID.Equals(id)
//and so on....
如果我不传递ID(即Null),这种方法会起作用吗? 关键是函数可以将所有空值作为select * from语句等价的参数. 任何人都可以帮助我用示例代码构建最佳查询? 解决方法好吧,它并不完全清楚你想要什么,但是如果你只想添加非null的参数where子句,你可以这样做:public IQueryable<Student> FindByAllStudents
(int? id,string name,int? courseID,bool? isActive)
{
IQueryable<Student> query = db.Student;
if (id != null)
{
query = query.Where(student => student.ID == id.Value);
}
if (name != null)
{
query = query.Where(student => student.Name.Contains(name));
}
if (courseID != null)
{
query = query.Where(student => student.CourseID == courseID.Value);
}
if (isActive != null)
{
query = query.Where(student => student.IsActive == isActive.Value);
}
return query;
}
我没有尝试过,并且LINQ to SQL可能会被代码混淆以找到可空值类型的值.您可能需要编写如下代码: if (courseID != null)
{
int queryCourseID = courseID.Value;
query = query.Where(student => student.CourseID == queryCourseID);
}
首先尝试更简单的形式值得:) 当然,这一切都有点恼人.一种有用的扩展方法可以使生活更简洁: public static IQueryable<TSource> OptionalWhere<TSource,TParameter>
(IQueryable<TSource> source,TParameter? parameter,Func<TParameter,Expression<Func<TSource,bool>>> whereClause)
where TParameter : struct
{
IQueryable<TSource> ret = source;
if (parameter != null)
{
ret = ret.Where(whereClause(parameter.Value));
}
return ret;
}
然后你就像这样使用它: public IQueryable<Student> FindByAllStudents
(int? id,bool? isActive)
{
IQueryable<Student> query = db.Student
.OptionalWhere(id,x => (student => student.ID == x))
.OptionalWhere(courseID,x => (student => student.CourseID == x))
.OptionalWhere(isActive,x => (student => student.IsActive == x));
if (name != null)
{
query = query.Where(student => student.Name.Contains(name));
}
return query;
}
使用像这样的高阶函数可能会让你感到困惑,如果你对它不太满意,那么如果你没有做很多这样的查询,你可能会想要坚持更长但更简单的代码. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 将一个属性与另一个属性进行比较的MVC数据注
- 如何使用asp.net中的“发布/重定向/获
- ASP.NET Webforms的MVVM模式?
- asp.net-mvc-5.1 – 如何在EnumDropDownListFor中设置所选值
- asp.net – 单独配置文件为web.config的部分
- asp.net-mvc-3 – 在ASP.NET MVC中本地化/翻译路由
- asp.net-mvc – 如何在Razor View中格式化lambda表达式中的
- Azure上的Asp.Net Core 2.0产生了502.5
- 在asp.net中使用太多会话的缺点
- asp.net – 在WebForms中调试时关闭捆绑/缩小
推荐文章
站长推荐
- asp.net – post文件提供404页面结果,即使发布的
- asp.net-mvc-3 – ASP.NET MVC 3 _Layout.cshtml
- asp.net-mvc – MVC 5 Bundle错误
- 如何从ASP.NET Web服务实现自定义JSON序列化?
- asp.net-mvc – Visual Studio 2010是否支持MVC
- asp.net-mvc – 有一种方法我可以在ASP中调试路由
- asp.net-web-api – ExtensionlessUrlHandler和“
- asp.net-mvc – 如何在ASP.NET MVC中构建没有Vie
- asp.net-mvc – EF代码首先不生成表
- asp.net-mvc – 为什么ValidateInput(False)不工
热点阅读
