Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Core Exclude,其中多个列为Null或空_C#_Linq_Ef Core 2.0 - Fatal编程技术网

C# EF Core Exclude,其中多个列为Null或空

C# EF Core Exclude,其中多个列为Null或空,c#,linq,ef-core-2.0,C#,Linq,Ef Core 2.0,我有一个SQL Server表,名为ControlActivityChangeLog。该表有列CurrentValue和NewValue,其中两列都是可为空的nvarchar。如何查询所有ControlActivityChangeLogs,但排除CurrentValue和NewValue为null或空的结果。如果CurrentValue为null或空,而NewValue不是,则我需要该记录 我尝试将其添加到以下查询中,但最终没有返回任何结果: !x.ControlActivityChangeLo

我有一个SQL Server表,名为
ControlActivityChangeLog
。该表有列
CurrentValue
NewValue
,其中两列都是可为空的nvarchar。如何查询所有ControlActivityChangeLogs,但排除CurrentValue和NewValue为null或空的结果。如果CurrentValue为null或空,而NewValue不是,则我需要该记录

我尝试将其添加到以下查询中,但最终没有返回任何结果:

!x.ControlActivityChangeLogs.Any(y => string.IsNullOrEmpty(y.CurrentValue) && string.IsNullOrEmpty(y.NewValue))
这是我的简历:

var qry = _context.ControlActivities
        .Include(x => x.ControlActivityChangeLogs)
        .Include(x => x.Company)
        .Where(x => 
            !x.IsDeleted && 
            !x.IsArchived && 
            !x.ControlActivityChangeLogs.Any(y => string.IsNullOrEmpty(y.CurrentValue) && string.IsNullOrEmpty(y.NewValue)))
        .AsQueryable();


    **OTHER COLUMN FILTERS HERE**


    var results = await qry.Select(x => new ModifiedCAModel
            {
                **List Of Columns**,
                Changes = x.ControlActivityChangeLogs
                    .Where(y => y => y.ControlActivityIssueId == null && y.ControlActivityTestId == null)
                    .OrderByDescending(y => y.ChangedDate)
                    .ToList()
            }).ToListAsync();
您应该检查正在执行的sql

这可以通过向ef添加日志来获得

您应该检查正在执行的sql


这可以通过向ef添加日志来获得。

其中的
任何
条件都是用于包含的,因此您需要

排除CurrentValueNewValuenull或空的结果

那是

包括CurrentValueNewValue不为null或空的结果

i、 e.代替

!x.ControlActivityChangeLogs.Any(y => string.IsNullOrEmpty(y.CurrentValue) && string.IsNullOrEmpty(y.NewValue)))
你需要

x.ControlActivityChangeLogs.Any(y => !string.IsNullOrEmpty(y.CurrentValue) || !string.IsNullOrEmpty(y.NewValue)))

其中
任何
条件都用于包含,因此您需要

排除CurrentValueNewValuenull或空的结果

那是

包括CurrentValueNewValue不为null或空的结果

i、 e.代替

!x.ControlActivityChangeLogs.Any(y => string.IsNullOrEmpty(y.CurrentValue) && string.IsNullOrEmpty(y.NewValue)))
你需要

x.ControlActivityChangeLogs.Any(y => !string.IsNullOrEmpty(y.CurrentValue) || !string.IsNullOrEmpty(y.NewValue)))

我把你写的东西翻译成了tsql,它似乎返回了正确的结果。你上面的代码肯定会出错,但我明白你想做什么。我将用适当的linq进行修复,并让您知道它是如何工作的。谢谢。谢谢,是的,只是sudo代码,让我知道错误在哪里,或者建议修改,我倾向于避免linq querys中的c#函数,即使c#函数有内置于EF的翻译方法,我也无法翻译耶稣诞生。有很多不是这样的,而不是猜测哪些是或不是我只是避免。仅供参考,EF Core将
string.IsNullOrEmpty
转换为SQL,因此没有必要对
null
使用单独的条件。我将您编写的内容转换为tsql,它似乎返回了正确的结果。你上面的代码肯定会出错,但我明白你想做什么。我将用适当的linq进行修复,并让您知道它是如何工作的。谢谢。谢谢,是的,只是sudo代码,让我知道错误在哪里,或者建议修改,我倾向于避免linq querys中的c#函数,即使c#函数有内置于EF的翻译方法,我也无法翻译耶稣诞生。有很多不是这样的,而不是猜测哪些是或不是我只是避免。仅供参考,EF Core将
字符串。IsNullOrEmpty
转换为SQL,因此没有必要对
null
使用单独的条件。我同意,这就是我写的。我不明白的是,如果我把它添加到qry的Where中,它将不起作用。它返回所有结果。但是,如果我把它添加到Select中的Where中,它就会工作。我同意,这就是我写的。我不明白的是,如果我把它添加到qry的Where中,它将不起作用。它返回所有结果。但是,如果我将其添加到Select中的Where中,那么它就起作用了。