Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这是使用LINQ返回此数据的正确方法吗_C#_Linq - Fatal编程技术网

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

C# 这是使用LINQ返回此数据的正确方法吗,c#,linq,C#,Linq,我有以下linq声明,但我不相信这是实现目标的最佳方式(但我不确定): 这样做的目的是查询Buyer.OperatingCalendar,找到一行指示今天是公共假日,如果不是公共假日,则找到一行指示星期几。一些买家没有任何行 关键是OperatingCalendar可能包含每个买家两种情况下的一行,但如果存在公共假日,则必须覆盖一周中的某一天。若不存在行,买方将返回null 无法使用或-由于独特的数据要求。下图应该解释这种情况 其中将永远不会返回null,因此在此处无效。假设您只想提取一个结果,

我有以下linq声明,但我不相信这是实现目标的最佳方式(但我不确定):

这样做的目的是查询
Buyer.OperatingCalendar
,找到一行指示今天是公共假日,如果不是公共假日,则找到一行指示星期几。一些买家没有任何行

关键是
OperatingCalendar
可能包含每个买家两种情况下的一行,但如果存在公共假日,则必须覆盖一周中的某一天。若不存在行,买方将返回null

无法使用或-由于独特的数据要求。下图应该解释这种情况


其中
将永远不会返回
null
,因此在此处无效。假设您只想提取一个结果,那么您应该使用而不是
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)

既然你在这两种情况下都是在退货,你不需要看看其中一种是真的吗?为什么银行假日支票在第一位有关系?buyer对象将同时包含bankholidats集合和dayofweek集合。在此处使用
将不起作用,因为
Where
从不返回
null
。我认为您的表达式不会做您想做的事-。Where返回一个可枚举列表,该列表将为空,因此如果没有项目,则不会返回null。所以你的??表达式永远不会选择第二个选项。您需要对每个表达式执行.FirstOrDefault()。在DateTime上签入扩展方法可能会更为整洁,如果买家位于具有不同公共假日的区域,则提供特定的自定义日历类型。银行假日是否与
DayOfWeek
具有相同类型的集合?第二种变体不起作用。还有其他与买方/运营压延ID相关的列,例如打开和关闭时间。因此,找到正确的OperatingCalendarID是至关重要的。@dotnetnoob我只能根据给出的信息回答这个问题,在这种情况下,第二个示例在功能上与第一个示例等效,因此第一个变体不起作用,而第二个变体不起作用。SingleOrDefault的使用也失败了。为了提供更多信息,我附加了DB模式。我认为您需要
x.OperatingCalendar.BankHolidays.FirstOrDefault(…)
@GertArnold如果我正确理解OP,他们希望返回一个
买家
,如果日期是在银行假日,那么我认为
Any
在这里是正确的。
return Buyer.SingleOrDefault(x => 
    x.OperatingCalendar.BankHolidays.Any(y => y.OccursOn == today.Date) || 
    x.OperatingCalendar.DayOfWeek.DayID == (int)today.DayOfWeek)