【发布时间】:2021-05-26 08:10:56
【问题描述】:
我在过滤 EF Core 结果时遇到问题。我的查询简单明了,但结果却不是我所期望的。此处显示的代码是我迄今为止尝试过的查询,但我不想显示的项目仍包含在结果中。
那么带有 P8、DG、DJ、DH、DM 的项目不应该包含在查询中,但是当我运行带有 P8、DG、DJ、DH、DM 的应用程序文档类型时,仍然包含。
@foreach (var cmdm in ViewBag.BSID_UNPAID)
{
<tr>
<td>@cmdm.BLART</td>
<td>@cmdm.KUNNR</td>
<td>@cmdm.BUDAT</td>
<td></td>
<td>@cmdm.SGTXT</td>
<td>@cmdm.DMBTR</td>
</tr>
}
我尝试过的第一个代码
ViewBag.BSID_UNPAID = _context.BSIDs.Where(i =>
(i.UMSKZ == "" && i.BLART != "P8") ||
(i.UMSKZ == "" && i.BLART != "DG") ||
(i.UMSKZ == "" && i.BLART != "DJ") ||
(i.UMSKZ == "" && i.BLART != "DH") ||
(i.UMSKZ == "" && i.BLART != "DM")).OrderByDescending(e => e.ZFBDT);
我尝试过的第二个代码
ViewBag.BSID_UNPAID = _context.BSIDs.Where(a =>
a.UMSKZ == "" &&
(a.BLART != "P8" ||
a.BLART != "DG" ||
a.BLART != "DJ" ||
a.BLART != "DH" ||
a.BLART != "DM")).OrderByDescending(e => e.ZFBDT);
不应该包含 DM Doc Type 的项目,但在上面的屏幕截图中,它们仍然包含在内。
希望有人能帮我找出代码的哪一部分我错了。
【问题讨论】:
-
(X!=A) || (X!=B)总是正确的。但是你还没有解释你想要什么。 -
首先,您遗漏了问题中最重要的部分,至少可以说这很奇怪......这也是一个布尔代数/命题逻辑 101 问题。你只需要考虑你的 or 和 and 的后果。因此,这应该作为一个错字几乎被关闭
-
如果您认真地想得到这个答案,请给出一个包含测试数据的简单结构,并展示您对该查询的期望。我们称之为minimal reproducible example,也可以阅读How to Ask
-
@00110001 嗨..当然..我会编辑我的帖子添加一些截图,谢谢! :)
-
不,不是屏幕截图,minimal reproducible example 如果需要,请使用 .net fiddle
标签: c# asp.net-core entity-framework-core linq-to-entities asp.net-core-3.1