这是使用LINQ返回此数据的正确方法吗?

时间:2014-04-30 10:54:37

标签: c# linq

我有以下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。下图应说明情况。

enter image description here

1 个答案:

答案 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)