要求:
此时显示订单的当前状态。这将返回尚未发货的所有订单以及今天发货的订单。
数据结构:
OrderHeader (1) -> (many) ShippingContainerHeaders
以下代码的副本。它最初与oh.CreatedOn
部分一起使用,现在已被注释掉了。但是要求变得精细,而是需要使用已连接表ShippingContainerHeader.ShipDateTimeUTC
的特定发货日期来考虑那些已发货。如果该订单的任何一个船舶集装箱具有ShipDateTimeUTC
今天,则包括它。但是我在下面的内容不会编译并给出这个错误:
Error 17 Type of conditional expression cannot be determined because there is no implicit conversion between 'System.Collections.Generic.IEnumerable<OTIS.Domain.InventoryMgmt.ShippingContainerHeader>' and 'bool'
return orderHeaderRepository
.SearchFor(oh =>
oh.FacilityId == intFacilityId
&& oh.OrderType == OrderHeader.OrderTypes.ShipOrder.ToString()
&& (
oh.StatusId >= (int)OrderHeader.Statuses.Shipped && oh.ShippingContainerHeaders != null
? oh.ShippingContainerHeaders.Where(sh => sh.ShipDateTimeUTC >= startDateTime) //(oh.CreatedOn >= startDateTime) && (oh.CreatedOn <= endDateTime)
: oh.Id > 0
)
)
更新
如果我将.Where
更改为.Any
,我会收到此错误:
Cannot compare elements of type 'System.Collections.Generic.ICollection`1[[OTIS.Domain.InventoryMgmt.ShippingContainerHeader, OTIS.Domain, Version=1.5.6054.27019, Culture=neutral, PublicKeyToken=null]]'. Only primitive types, enumeration types and entity types are supported.
我的解决方案
虽然接受的答案是具体的,因为没有办法实现我想要实现的目标,但它没有提供替代解决方案。最后,我不得不创建一个UNION查询,首先查询尚未发货的所有订单,另一个发货的订单,并对两个查询执行联合。
答案 0 :(得分:0)
oh.ShippingContainerHeaders != null
? oh.ShippingContainerHeaders.Where(sh => sh.ShipDateTimeUTC >= startDateTime) //(oh.CreatedOn >= startDateTime) && (oh.CreatedOn <= endDateTime)
: oh.Id > 0
此声明不正确:
oh.ShippingContainerHeaders
.Where(sh => sh.ShipDateTimeUTC >= startDateTime)
=IEnumerable<ShippingContainerHeader>()
oh.Id > 0
是bool!
阅读here原因!
无法确定条件表达式的类型,因为&#39; class1&#39;之间没有隐式转换。和&#39; class2&#39; 当您希望不同类的对象使用相同的代码时,类之间的转换很有用。但是,两个一起工作的类不能进行相互和冗余的转换,也不能进行隐式转换。 class1和class2的类型是独立确定的,并且选择更通用的类型作为条件表达式的类型。有关如何确定类型的更多信息,请参阅无条件运算符无法隐式转换。 要解析CS0173,请验证class1和class2之间是否存在唯一的隐式转换,无论转换的方向如何,也不管转换所在的类是什么。有关更多信息,请参阅隐式数字转换表(C#参考)和转换运算符(C#编程指南)。