【发布时间】:2020-02-11 19:40:33
【问题描述】:
我正在制作一个搜索表单,用于查询我的数据库以根据表单上填写的内容显示结果。唯一必填字段是我工作的日期。所有其他字段都是可选的,如果未填写可选字段,则它不应该是查询的一部分。这是我写的代码:
var queryable = context.TransactionJournal.Where(s => s.TransactionDateTime <= transactionDate)
.Where(s => Region == null || Region == s.AcquirerID)
.Where(s => MCC == null || MCC == s.MerchantCategoryCode)
.Where(s => MerchantID == null || MerchantID.Contains(s.MerchantID))
.Where(s => TxnCurrency == null || TxnCurrency.Contains(s.Currency))
.Where(s => TerminalID == null || TerminalID.Contains(s.TerminalID))
.Where(s => TxnAmount.ToString() == null || TxnAmount==(s.TransactionAmount))
.Where(s => BIN == null || BIN.Contains(s.Bin))
.Where(s => MsgType == null || MsgType.Contains(s.MessageType))
.Where(s => MaskedPan == null || MaskedPan.Contains(s.PANM))
.Where(s => ProcessingCode == null || ProcessingCode.Contains(s.ProcessingCode))
.Where(s => ClearPan == null || ClearPan.Contains(s.PAN))
.Where(s => ResponseCode == null || ResponseCode.Contains(s.ResponseCode))
.Where(s => AuthorizationCode == null || AuthorizationCode.Contains(s.AuthorizationCode))
.Where(s => EntryMode == null || EntryMode.Contains(s.PosEntryMode))
.AsQueryable();
不幸的是,它无法正常工作。谁能告诉我我错过了什么或者是否有更好的方法来写这个?
【问题讨论】:
-
.Where((s => Region == null || Region == s.AcquirerID) && (MCC == null || MCC == s.MerchantCategoryCode) && ....)
-
这对我来说看起来不错。尽管您不能链接
.Where语句并使用&&代替它们,但它在功能上与您现在所拥有的相同。最重要的是:“it does not work correctly”不是问题陈述。请包括输入和预期输出。 -
@Igor 很抱歉,查询在输出中根本没有显示任何结果
-
@Adil15 - 我明白,但您需要提供输入和预期输出。您没有得到输出的最可能原因是
Where子句中的其中一个条件正在评估为false而您只是没有抓住它(毕竟您是人类,可能会犯错误或没有注意到某些事情) .但是,如果您没有带有样本输入的样本数据,那么没有人可以帮助您发现该错误。 -
@Adil15 通过删除更多语句尝试“调试”它。你会发现其中一条语句返回 false
标签: c# sql entity-framework linq