【发布时间】:2017-05-01 17:11:18
【问题描述】:
我正在尝试在控制器中编写一个类似于我在 SQL 存储过程中的查询:
Select * FROM TableName Where aDate >= beginDate and aDate <= endDate
在我的控制器中,我声明了 2 个变量,它们将从我的视图文件中获取输入值:
DateTime? startDate = input.BeginDateInput;
DateTime? endDate = input.EndDateInput;
以及从 db 中获取值的变量 q
var q = db.tblName.AsQueryable();
目前,我有一个包含所有值的基于 Select 的表,如下所示:
var data = q.Select(
p =>
new
{
//...
WarrantyExpDate = p.WarrantyExpDate.ToShortDateString(),
//...
});
当我尝试在末尾添加 .Where() 时
Select(...).Where(DateTime.Compare(Convert.ToDateTime(WarrantyExpDate), (DateTime)startDate)>0)
(为了时间而缩短),我收到了一个错误WarrantyExpDate was not in the current context。在进行了一些研究之后,我尝试重新创建来自 that thread 的建议以交换选择和位置,但它返回了相同的问题。
谁能指出我做错了什么的正确方向?如何让 Select 和 Where 都识别同一个变量?
【问题讨论】:
-
Where需要委托,通常采用 lambda 表达式的形式。在你的情况下,更像.Where(n => DateTime.Compare(Convert.ToDateTime(n.WarrantyExpDate)... -
@BJMyers 我执行了建议的快速修复,它似乎消除了错误。感觉恶心肯定会让你忘记这些基础知识。明天测试后我会告诉你结果。