我有以下linq声明,但我并不相信它是实现目标的最佳方式(但我不确定):
return
Buyer.Where(x =>
x.OperatingCalendar.BankHolidays.Any(y => y.OccursOn == today.Date)) ??
Buyer.Where(x =>
x.OperatingCalendar.DayOfWeek.DayID == (int)today.DayOfWeek);
我们的想法是查询Buyer.OperatingCalendar
以查找指示今天是公众假期的行,如果不是公共假日,则表示星期几。一些买家没有任何行。
关键是OperatingCalendar
可能为每个买方的两个方案都包含一行,但如果存在公共假期,则必须覆盖一周中的某一天。如果不存在任何行,则买方将返回null。
由于独特的数据要求,无法使用OR。下图应说明情况。
答案 0 :(得分:2)
Where
永远不会返回null
,因此?? operator在这里无用。假设您只想提取单个结果,那么您应该使用SingleOrDefault而不是Where
,这应该可以让您正确使用??
return
Buyer.SingleOrDefault(x =>
x.OperatingCalendar.BankHolidays.Any(y => y.OccursOn == today.Date)) ??
Buyer.SingleOrDefault(x =>
x.OperatingCalendar.DayOfWeek.DayID == (int)today.DayOfWeek);
但是,您可以在一个查询中执行此操作,这将节省您额外的数据库行程
return Buyer.SingleOrDefault(x =>
x.OperatingCalendar.BankHolidays.Any(y => y.OccursOn == today.Date) ||
x.OperatingCalendar.DayOfWeek.DayID == (int)today.DayOfWeek)