C# EF Core Exclude,其中多个列为Null或空
我有一个SQL Server表,名为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
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添加日志来获得。其中的
或任何条件都是用于包含的,因此您需要
排除CurrentValue和NewValue为null或空的结果
那是
包括CurrentValue或NewValue不为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)))
其中
或任何
条件都用于包含,因此您需要
排除CurrentValue和NewValue为null或空的结果
那是
包括CurrentValue或NewValue不为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中,那么它就起作用了。