C# 我的EF Core查询没有显示我想要的结果

C# 我的EF Core查询没有显示我想要的结果,c#,asp.net-core,entity-framework-core,linq-to-entities,asp.net-core-3.1,C#,Asp.net Core,Entity Framework Core,Linq To Entities,Asp.net Core 3.1,我在筛选我的EF核心结果时遇到问题。我的查询简单明了,但结果并不是我所期望的。这里显示的代码是我到目前为止尝试过的查询,但是我不想显示的项目仍然包含在结果中 然后,带有P8、DG、DJ、DH、DM的项目不应该包括在查询中,但当我运行带有P8、DG、DJ、DH、DM的应用程序文档类型时,仍然包括这些项目 @foreach (var cmdm in ViewBag.BSID_UNPAID) { <tr> <td>@cmdm.BLART</td&g

我在筛选我的EF核心结果时遇到问题。我的查询简单明了,但结果并不是我所期望的。这里显示的代码是我到目前为止尝试过的查询,但是我不想显示的项目仍然包含在结果中

然后,带有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类型的项目不应包括在内,但在上面的屏幕截图中,它们仍然包括在内

@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>
}

我希望有人能帮我找出代码的哪一部分是错的。

正如@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的项目不应包含在查询中

因此,所有这些条件都应该通过逻辑AND运算符连接起来

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

(X!=A)|(X!=B)
总是正确的。但是你还没有解释你想要什么。首先,你把问题最重要的部分漏掉了,至少说起来很奇怪。。。。这也是一个布尔代数/命题逻辑101问题。你只需要考虑一下你的ors和and的后果。因此,如果您真的想得到答案,请给出一个带有测试数据的简单结构,并显示您希望从这个查询中得到什么,那么这几乎应该作为一个输入错误来结束。我们称之为a,同时读取@00110001 hi。。当然我将编辑我的帖子,添加一些截图,谢谢!:)不,不是屏幕截图,如果需要,请使用.net fiddle