C# 如何计算回报<;T>/IList<;T>;为null或使用null合并运算符的值
我想在三条语句中使用null合并运算符C# 如何计算回报<;T>/IList<;T>;为null或使用null合并运算符的值,c#,C#,我想在三条语句中使用null合并运算符 如果第一个列表返回null,则返回第二个列表 如果第二个列表返回null,则返回第三个列表 private IList<a> a => new IList<a>().ToList(); private IList<a> CalcDate { get { return a.Where(p => p.a.LastDate.HasValue && p.a
private IList<a> a => new IList<a>().ToList();
private IList<a> CalcDate
{
get
{
return a.Where(p => p.a.LastDate.HasValue && p.a.LastDateHasValue <= DateTime.Today)
?? a.Where(p => p.LastUpdateDate.HasValue && p.LastUpdateDate <= DateTime.Today)
?? a.Where(p => p.CreateDate.HasValue && p.CreateDate <= DateTime.Today);
}
}
private IList a=>new IList().ToList();
私有IList CalcDate
{
得到
{
返回a.Where(p=>p.a.LastDate.HasValue&&p.a.LastDateHasValue p.lastdupdatedate.HasValue&&p.lastdupdatedate p.CreateDate.HasValue&&p.CreateDate您可以添加自己的扩展方法NullIfEmpty
,如下所示
public static class Extensions
{
public static IEnumerable<T> NullIfEmpty<T>(this IEnumerable<T> seq)
{
if (!seq.Any())
return null;
return seq;
}
}
您可以添加自己的扩展方法NullIfEmpty
,如下所示
public static class Extensions
{
public static IEnumerable<T> NullIfEmpty<T>(this IEnumerable<T> seq)
{
if (!seq.Any())
return null;
return seq;
}
}
不幸的是,这并不容易,因为对的每个调用都将返回一个集合,即使该集合为空。换句话说,您将从第一个Where调用获得结果,即使该集合为空,那么结果也将为空,即使其他两个Where调用中的一个将产生某些结果。您需要创建e您自己的扩展方法或类似方法,或者只是将整个表达式重写为一系列调用和if语句。如果每个Where方法预期并保证返回0或1个元素,则可以使用FirstOrDefault
,并假设a
是一个类,这将为您提供所需的内容,但如果每个步骤都可以提供更多的han 1项,仅使用?
语法是不可行的。你是说“空”而不是“空”吗?事实上,这个问题没有多大意义。不幸的是,这不容易做到,因为对。Where
的每个调用都将返回一个集合,即使集合为空。换句话说,您将从第一个Where调用获得结果,即使该调用为空,那么结果也将为空,即使其他两个Where调用中的一个为空s将产生一些结果。您需要创建自己的扩展方法或类似方法,或者将整个表达式重写为一系列调用和if语句。如果每个Where方法预期并保证返回0或1个元素,您可以使用FirstOrDefault
,并假设a
是一个类,则你想要什么,但如果每一步都能给出多个项目,那么单凭??
语法是不可行的。你是说“空”而不是“空”吗?事实上,这个问题没有多大意义。