【问题标题】:Multiple query and filtering in data layer ASP.net MVC数据层 ASP.net MVC 中的多重查询和过滤
【发布时间】:2017-10-10 08:54:33
【问题描述】:

是否可以在数据层进行多次查询和过滤。

问题:我需要在这一层上执行此操作,因为在 controller.js(使用 angularjs)上执行此操作时存在性能和缓存问题。

概述:我需要从学生数据库表中显示每年级别的不同表。当管理员点击一年级按钮时,将显示所有一年级学生(其他过滤和排序在表格中)

有四个html显示表:第1年、第2年、第3年和第4年

我可以在数据层这样做吗?见下面的代码:

        public IQueryable<RequestStudents> Get()
    {
        StudentsModelContainer context = DbContextFactory<StudentsModelContainer>.Create();
            var result = context.RequestStudentSet;
            return result;
    }

以上代码将显示所有学生

我已经尝试了下面的代码,但它只适用于第一年,我无法添加其他三个查询

public IQueryable<RequestStudents> Get()
    {
        StudentsModelContainer context = DbContextFactory<StudentsModelContainer>.Create();
            var result = context.RequestSet.Where(x => x.YearLvl == 1);
        return result;
    }

【问题讨论】:

  • 为什么不为YearLvl - public IQueryable&lt;RequestStudents&gt; Get(int yearLevel)添加一个参数
  • 谢谢你试试看!

标签: asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

是的,您可以将参数传递给Get方法,或者您可以重载Get方法,如下所示

public IQueryable<RequestStudents> Get()
{
    StudentsModelContainer context = DbContextFactory<StudentsModelContainer>.Create();
        var result = context.RequestSet.Where(x => x.YearLvl == 1);
    return result;
}

public IQueryable<RequestStudents> Get(int yearLevel)
{
    StudentsModelContainer context = DbContextFactory<StudentsModelContainer>.Create();
        var result = context.RequestSet.Where(x => x.YearLvl == yearLevel);
    return result;
}

要返回 FirstorDefault 值,您可以如下更新您的方法

public RequestStudents Get(int yearLevel)
    {
        StudentsModelContainer context = DbContextFactory<StudentsModelContainer>.Create();
        return context.RequestSet.Where(x => x.YearLvl == yearLevel).FirstOrDefault();            
    }

【讨论】:

  • 它正在工作,谢谢!但我还需要使用“FirstOrDefault”来查看特定记录。我该怎么做?
  • 所以这意味着我需要两种方法?可以有相同的参数吗?
猜你喜欢
  • 1970-01-01
  • 2017-04-03
  • 2015-12-08
  • 1970-01-01
  • 2011-02-06
  • 2019-04-07
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多