【发布时间】:2021-09-23 14:49:39
【问题描述】:
以下 SQL 语句返回 844 行:
SELECT <column list>
FROM v_TEST_REQUEST_INVOICE
WHERE ARCHIVE_DATE IS NULL
AND STATUS_ID = 8
AND JOURNAL_ENTRY_NUMBER IS NULL
AND BILLING_PROCESS_DATE IS NOT NULL
在 SQL Server 中,STATUS_ID 是 int,JOURNAL_ENTRY_NUMBER 是 varchar(30),BILLING_PROCESS_DATE 是 datetime,它接受空值。
在 C# 中,在我的 TestRequestInvoice 类中,STATUS_ID 是一个 int,JOURNAL_ENTRY_NUMBER 是一个字符串,BILLING_PROCESS_DATE 是一个 DateTime?(可为空的 DateTime)
使用 Dapper,我将v_TEST_REQUEST_INVOICE(不带WHERE 子句)中相关列的选择结果提取到List<TestRequestInvoice>。
使用 VS 调试器我可以看到列表中有 1893 个成员。然后我使用 LINQ 尝试将 List 限制为仅匹配 where 子句的那些成员,预计保留 844 个成员。
test_request_invoices = test_request_invoices.Where(tri => tri.STATUS_ID == 8 && tri.JOURNAL_ENTRY_NUMBER == null && tri.BILLING_PROCESS_DATE.HasValue).ToList();
但结果是一个空列表。为什么???我做错了什么?
我已经在Checking to see if a DateTime variable has had a value assigned看答案了
更新:这是 Dapper 生成的 SQL 代码:
SELECT
[TEST_REQUEST_ID],
[SCHEDULE_ITEM_ID],
[STUDENT_ID],
[STUDENT_LFNAME],
[BUDGET_ID],
[MNEMONIC],
[COORDINATOR_ID],
[PERIOD_ID],
[PERIOD_NAME],
[TEST_TYPE_ID],
[STATUS_ID],
[STATUS],
[STATUS_DATE],
[CANCELLATION_STATUS_ID],
[CANCELLATION_STATUS],
[TEST_COMPLETED],
[RAW_SCORE],
[CONVERTED_SCORE],
[FINAL_ID],
[TEST_RESULT_APPROVAL_BY],
[TEST_RESULT_APPROVAL_DATE],
[LATE_CANCELLATION_COMMENTS],
[RESULTS_REPORTED_BY],
[RESULTS_REPORTED_DATE],
[SC_POSTED_SCORE_NOTIFIED],
[LIONPATH_UPLOAD_PREP],
[INVOICE_ACCOUNT],
[INVOICE_FUND],
[INVOICE_OBJECT_CODE],
[INVOICE_COST_CENTER],
[SIMBA_COST_CENTER],
[SIMBA_INTERNAL_ORDER],
[AMOUNT],
[INVOICE_AMOUNT_REASON],
[JOURNAL_ENTRY_NUMBER],
[AA_INVOICE_NOTIFIED],
[INVOICING_AA],
[INVOICING_AA_EMAIL],
[INVOICING_AA_LFNAME],
[INVOICING_AA_PHONE],
[ADD_BY],
[ADD_DATE],
[CHANGE_BY],
[CHANGE_DATE],
[ARCHIVE_BY],
[ARCHIVE_DATE]
FROM v_TEST_REQUEST_INVOICE
WHERE ARCHIVE_DATE IS NULL
ORDER BY ADD_DATE
【问题讨论】:
-
如何比较查询?
-
我不明白你的问题@SvyatoslavDanyliv——你能详细说明一下吗?而且我不确定你为什么对我的问题投反对票(如果是你投反对票的话)
-
Nullable<DateTime>(或DateTime?)在基础数据类型显式不可为空时使用。因此.Value将总是 有一个值,您必须检查.HasValue以了解存储的值是否有任何意义! -
EF 生成 SQL,只需将预期的 SQL 与生成的 SQL 进行比较。使用生成的 SQL 更新问题也更好。
-
@Immersive 我很困惑。我认为这正是我正在做的。谢谢。
标签: c# sql-server linq dapper