Linq查询与空检查,以获得行在不同的情况下

本文关键字:情况下 查询 检查 Linq | 更新日期: 2023-09-27 18:18:34

有一个关于日期的sharepoint列表:

  1. scheduleingenddate(可以为null)
  2. 新闻日期(总是有值)

我必须从这个列表中获得30条具有以下要求的新闻:

  1. 如果scheduleingenddate为空,检查是否(today> NewsDate)
  2. 如果scheduleingstartdate不为空,检查是否(today>= NewsDate &&今天<= SchedulingEndDate)

这是我写的:

public static IList<NewsPage> GetNews(int maxNews)
{
    var list = listNews.Select(p => p).
    Where(p => (DateTime)p.NewsDate <= DateTime.Now).CustomWhere().
    OrderByDescending(p => p.NewsDate).Take(maxNews).AsQueryable();
    news = list.ToList();
}
public static IQueryable<NewsPage> CustomWhere(this IQueryable<NewsPage> newsList)
{
    return newsList.Where(p => (p.SchedulingEndDate != null 
    && (DateTime)p.SchedulingEndDate >= DateTime.Now));
}

如预期的那样,它只返回scheduleingenddate不为空的行。

你建议我怎么做?

Linq查询与空检查,以获得行在不同的情况下

根据您的要求,我认为像这样的Where()子句尽管非常丑陋,但应该可以达到目的:

   list.Where(p => (p.SchedulingEndDate == null && DateTime.Now > p.NewsDate)
                            || (p.SchedulingEndDate != null && p.SchedulingStartDate != null && (DateTime.Now > p.NewsDate && DateTime.Now < p.SchedulingEndDate)));

你可以把它分解成一个单独的函数来清理一下