Linq查询与空检查,以获得行在不同的情况下
本文关键字:情况下 查询 检查 Linq | 更新日期: 2023-09-27 18:18:34
有一个关于日期的sharepoint列表:
- scheduleingenddate(可以为null)
- 新闻日期(总是有值)
我必须从这个列表中获得30条具有以下要求的新闻:
- 如果scheduleingenddate为空,检查是否(today> NewsDate)
- 如果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不为空的行。
你建议我怎么做?
根据您的要求,我认为像这样的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)));
你可以把它分解成一个单独的函数来清理一下