【发布时间】:2017-08-29 02:17:04
【问题描述】:
我正在使用带有核心 2.0 的新 Razor 页面,我试图通过将 linq 和 db 初始化放入 App_code 文件夹中的实用程序类来查看是否可以共享查询代码,但我遇到了问题使这个类工作。
基本上我使用 linq 查询数据库,但我还有另一个 asp-page-handler 可以创建 PDF。
这是我的页面
public class IndexModel : PageModel
{
private readonly CrewLogContext _context;
//initialize db
public IndexModel(CrewLogContext context)
{
_context = context;
}
public IList<SelectionDailyReport> SelectionDailyReport { get; set; }
public DateSearchRange DateSearchRange { get; set; }
public async Task OnPostSelectionAsync(DateSearchRange DateSearchRange)
{
var result= await _context.TaskSelection.Where(x => x.WorkDate >= startDate && x.WorkDate <= endDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToListAsync();
SelectionDailyReport = result;
}
好的。所以这很好用。我还有一个调用 webApi 控制器的按钮,它基本上会查询相同的数据并生成 PDF。
我想创建一个实用程序类并从页面或 webapi 控制器调用它的方法,这样我就不必编写两次 linq 查询。
我创建了一个 App_Folder 并添加了一个 .cs 文件
在 Utility.cS 中
namespace WebCrewLog.App_Code
{
public class Utility
{
private CrewLogContext _context;
//initiate db connection
public Utility(CrewLogContext context)
{
_context = context;
}
public IList<SelectionDailyReport> GetSelectionData (DateSearchRange DateSearchRange)
{
var myList = _context.TaskSelection.Where(x => x.WorkDate >=DateSearchRange.StartDate && x.WorkDate <= DateSearchRange.EndDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToList();
return myList ;
}
然后从我的页面或我的 webapi 我想调用
SelectionDailyReport = Utility.GetSelectionData(DateSearchRange);
所以问题是智能感知没有检测到 GetSelectionData 方法。所以我想我应该将 GetSelectionData 方法设为静态。
所以更改实用程序类
public IList<SelectionDailyReport> GetSelectionData (DateSearchRange DateSearchRange)
{
var myList = _context.TaskSelection.Where(x => x.WorkDate >=DateSearchRange.StartDate && x.WorkDate <= DateSearchRange.EndDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToList();
....
public static IList<SelectionDailyReport> GetSelectionData (DateSearchRange DateSearchRange)
{
var myList = _context.TaskSelection.Where(x => x.WorkDate >=DateSearchRange.StartDate && x.WorkDate <= DateSearchRange.EndDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToList();
....
但是,当我这样做时,我在 _context.TaskSelection 上得到一个空异常,但不知道为什么会这样。
【问题讨论】:
-
因为当你将其更改为静态方法时,
_context并没有在同一个方法中定义。您在 Utility 实例的构造函数中声明了它。您之前的尝试Utility.GetSelectionData()将调用作为静态方法进行,但您将.GetSelectionData编写为实例方法。
标签: c# linq razor asp.net-core-mvc