C# 如何计算回报<;T>/IList<;T>;为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

我想在三条语句中使用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.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
    是一个类,则你想要什么,但如果每一步都能给出多个项目,那么单凭
    ??
    语法是不可行的。你是说“空”而不是“空”吗?事实上,这个问题没有多大意义。