【问题标题】:My EF Core query is not showing the results I want我的 EF Core 查询未显示我想要的结果
【发布时间】: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


【解决方案1】:

正如@Jeremy Lakeman 在评论中所说,真或假总是返回真。所以,第二部分总是正确的。

(a.BLART != "P8" ||
 a.BLART != "DG" ||
 a.BLART != "DJ" ||
 a.BLART != "DH" ||
 a.BLART != "DM")

第二个查询等于

ViewBag.BSID_UNPAID = _context.BSIDs.Where(a => a.UMSKZ == "").OrderByDescending(e => e.ZFBDT);

那么 P8, DG, DJ, DH, DM 的项目不应该包含在查询中

所以,所有这些条件都应该通过逻辑与运算符连接。

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多