【发布时间】:2019-07-11 08:10:53
【问题描述】:
我有以下 SQL 查询返回我需要的结果:
SELECT
STAFF_ID
FROM [dbo].[StaffTable]
WHERE STAFF_ID NOT IN (SELECT STAFF_ID
FROM [dbo].[StaffingTable]
WHERE [DATE] = @DATE
AND MODEL_ID = @Model)
我有以下控制器方法来尝试返回正确的结果:
public JsonResult GetStaffResults(DateTime date, string modelId)
{
Guid modelGuid = Guid.Parse(modelId);
var settings = new JsonSerializerSettings();
var staff = context.StaffTable.Select(c => new
{
Id = c.StaffId,
Name = c.StaffName
});
var staffing = context.StaffingTable.Select(c => new
{
modelId = c.ModelId,
manufacturerId = c.ManufacturerId,
staffId = c.StaffId,
date = c.Date,
recordId = c.RecordId
});
var staffResults = staff.Where(p => staffing.Select(o => o.modelId).First() == modelGuid && !staffing.Select(o => o.date).Contains(date));
return Json(shiftResults, settings);
}
但是,我在 Lambda 表达式上苦苦挣扎,它没有返回任何结果,所以我在某处遗漏了一些东西。
【问题讨论】:
-
SQL 语句中不需要那个
DISTINCT,它只是增加了一个延迟和一个不必要的排序。 -
很公平。我会删除它,谢谢。
-
附带说明,避免直接在控制器(或任何最终的“响应发送者”)中调用数据库上下文。考虑构建一个独立执行调用并让控制器使用结果的类。
标签: c# sql asp.net asp.net-mvc