【发布时间】:2021-11-08 08:44:13
【问题描述】:
我目前正在创建一个网站,在数据表中展示我的所有患者,我必须使用 FromSqlRaw 才能从我的数据库中获取数据。我有一个搜索功能,可以让我在表格中搜索患者,但是在进入页面时,当我使用 AsQueryable 并且表格中没有显示任何数据时,我会收到此错误。它建议我使用 AsEnumerable 但是当我这样做时,我得到一个智能感知错误。关于如何解决的任何想法?
public async Task<IActionResult> Search(StaySearchViewModel model)
{
if (model.Cleared)
{
return Json(new
{
draw = model.Draw,
data = new object[] { },
recordsFiltered = 0,
recordsTotal = 0,
total = 0
});
}
var records = getSearchData(model);
//var records = System.Linq.Enumerable.AsEnumerable(getSearchData(model)); // Hard coding this an enumerable will break line 55, 57, and 64
//Sorting
if (!string.IsNullOrEmpty(model.SortOrder))
records = records.OrderBy(model.SortOrder);
var count = await records.CountAsync().ConfigureAwait(false);
records = records.Skip(model.Start);
if (model.Length != -1) records = records.Take(model.Length);
// Create models
var result = new List<SpStaySearchResultViewModel>();
try
{
await records.ForEachAsync(r =>
{
result.Add(new SpStaySearchResultViewModel()
{
BuildingName = r.BuildingName,
CaseManager = r.CaseManager,
CaseManagerId = r.CaseManagerId,
OccupantFileAs = r.OccupantFileAs,
StayOCFSNumber = r.StayOCFSNumber,
StayId = r.StayId,
MaxOfBillSentDate = r.MaxOfBillSentDate,
CountOfChildren = r.CountOfChildren,
StartDate = r.StartDate,
EndDate = r.EndDate,
OccupantId = r.OccupantId,
IsActive = r.IsActive,
});
}).ConfigureAwait(false);
}
catch (Exception e) { }
return Json(new
{
draw = model.Draw,
data = result,
recordsFiltered = count,
recordsTotal = count,
});
}
private IQueryable<spStaysSearch> getSearchData(StaySearchViewModel model)
{
var records = db.SpStaySearches.FromSqlRaw("dbo.spStaysSearch").AsQueryable();
if (model.OccupantId.HasValue)
records = records.Where(x => x.OccupantId == model.OccupantId);
if (!string.IsNullOrWhiteSpace(model.OccupantFileAs))
records = records.Where(x => x.OccupantFileAs == model.OccupantFileAs);
if (!string.IsNullOrWhiteSpace(model.BuildingName))
records = records.Where(x => x.BuildingName == model.BuildingName);
if (!string.IsNullOrWhiteSpace(model.CaseManager))
records = records.Where(x => x.CaseManager == model.CaseManager);
if (!string.IsNullOrWhiteSpace(model.BuildingName))
records = records.Where(x => x.BuildingName == model.BuildingName);
if (model.IntakeDateStart.HasValue && model.IntakeDateEnd.HasValue)
{
records = records.Where(x => x.StartDate >= model.IntakeDateStart && x.StartDate <= model.IntakeDateEnd);
}
else
{
if (model.IntakeDateStart.HasValue)
records = records.Where(x => x.StartDate >= model.IntakeDateStart);
if (model.IntakeDateEnd.HasValue)
records = records.Where(x => x.StartDate <= model.IntakeDateEnd);
}
if (model.ExitDateStart.HasValue && model.ExitDateEnd.HasValue)
{
records = records.Where(x => x.EndDate >= model.ExitDateStart && x.EndDate <= model.ExitDateEnd);
}
else
{
if (model.ExitDateStart.HasValue)
records = records.Where(x => x.EndDate >= model.ExitDateStart);
if (model.ExitDateEnd.HasValue)
records = records.Where(x => x.EndDate <= model.ExitDateEnd);
}
if (model.IsActive.HasValue)
records = records.Where(x => x.IsActive == model.IsActive);
return records;
}
【问题讨论】:
-
有两个命名空间具有扩展方法名称
AsEnumerable()。检查您是否使用命名空间并删除一个多余的。如果两者都在使用,则应使用静态样式调用AsEnumerable方法 -
另外,不要发布图片。复制该弹出窗口中的错误文本。
-
你为什么打电话给
var records = getSearchData(model);,然后跟records = db.SpStaySearch.FromSqlRaw("dbo.SpStaySearch").AsEnumerable();?这将覆盖原始结果。AsEnumerable()将脱离IQueryable实现,代码似乎假定它会对其进行操作。这看起来像您在尝试使用直接 SQL 语句破解的现有 Linq 查询表达式时遇到了问题。在被FromRawSql和AsEnumerable捆绑之前 是否存在错误或问题? -
@LeVu 你说得对,我需要同时使用命名空间并尝试使我的搜索功能静态异步在我的 Json & var records = getSearchData(model); 上产生 CS0120 错误我正在使用 System.Linq 和 System.Linq.Dynamic.Core
-
@StevePy 我更新了我的代码并将 var records = db.SpStaySearch.FromSqlRaw("dbo.SpStaySearch").AsEnumerable();在我的 getSearchData 函数中,但我得到了同样的错误。以前我遇到数据库操作错误。 SqlException:无效的对象名称“SpStaySearch”。 Web 工具告诉我,为了应用我的迁移,我需要更新我 PMC 中的数据库,但我仍然遇到同样的错误。
标签: c# .net asp.net-mvc entity-framework