C# 条件化LINQ查询
目前我有一个LINQ查询,如下所示:C# 条件化LINQ查询,c#,linq,C#,Linq,目前我有一个LINQ查询,如下所示: var policy = snapshotDate == null ? await _dbContext.VPolicies .Where(p => p.PolicyNumber.Trim().Equals(policyNumber)) .OrderByDescending(d => d.PolicyEffectiveD
var policy = snapshotDate == null
? await _dbContext.VPolicies
.Where(p => p.PolicyNumber.Trim().Equals(policyNumber))
.OrderByDescending(d => d.PolicyEffectiveDate)
.FirstOrDefaultAsync()
: await _dbContext.VPolicies
.Where(p => p.PolicyNumber.Trim().Equals(policyNumber)
&& (p.PolicyEffectiveDate <= snapshotDate && p.PolicyExpirationDate > snapshotDate))
.OrderByDescending(d => d.PolicyEffectiveDate)
.FirstOrDefaultAsync();
var policy = await _dbContext.VPolicies
.Where(p => p.PolicyNumber.Trim().Equals(policyNumber))
.Where(p => snapshotDate != null && (p.PolicyEffectiveDate <= snapshotDate && p.PolicyExpirationDate > snapshotDate))
.OrderByDescending(d => d.PolicyEffectiveDate)
.FirstOrDefaultAsync();
我想知道我是否可以这样缩短它:
var policy = snapshotDate == null
? await _dbContext.VPolicies
.Where(p => p.PolicyNumber.Trim().Equals(policyNumber))
.OrderByDescending(d => d.PolicyEffectiveDate)
.FirstOrDefaultAsync()
: await _dbContext.VPolicies
.Where(p => p.PolicyNumber.Trim().Equals(policyNumber)
&& (p.PolicyEffectiveDate <= snapshotDate && p.PolicyExpirationDate > snapshotDate))
.OrderByDescending(d => d.PolicyEffectiveDate)
.FirstOrDefaultAsync();
var policy = await _dbContext.VPolicies
.Where(p => p.PolicyNumber.Trim().Equals(policyNumber))
.Where(p => snapshotDate != null && (p.PolicyEffectiveDate <= snapshotDate && p.PolicyExpirationDate > snapshotDate))
.OrderByDescending(d => d.PolicyEffectiveDate)
.FirstOrDefaultAsync();
但这不起作用,我想知道如何以适当的方式处理这个LINQ查询,并在不使用Terenery运算符的情况下缩短它们
提前感谢。您似乎希望对自己的病情进行评估
snapshotDate == null || (p.PolicyEffectiveDate <= snapshotDate && p.PolicyExpirationDate > snapshotDate)
也就是说,当snapshotDate为空时,请给出所有日期;否则,请给出范围内的日期
注意:关于多个where子句。在基于内存的集合中,由于额外的委托调用和潜在的多重枚举,将它们与&&相结合,您将获得性能提高,但是对于大多数LINQ to查询提供程序,它将在完全相同的SQL中进行计算。尽管一般来说,如果可以的话,最好将它们结合起来。试试这个:
var policy = await _dbContext.VPolicies
.Where(p => p.PolicyNumber.Trim().Equals(policyNumber)
&& (snapshotDate == null ||
(p.PolicyEffectiveDate <= snapshotDate &&
p.PolicyExpirationDate > snapshotDate)))
.OrderByDescending(d => d.PolicyEffectiveDate)
.FirstOrDefaultAsync();
如果snapshotDate不为null,此查询将应用PolicyEffectiveDate和PolicyExpirationDate的条件,否则仅应用PolicyNumber条件。什么是不起作用?当我不提供快照日期时,第一个LINQ查询将获得所有结果。当我不提供快照日期时,第二个linq查询为null