C# GroupBy-LINQ查询
我的课程结构如下:C# GroupBy-LINQ查询,c#,linq,C#,Linq,我的课程结构如下: public partial class OrderOrderData { public OrderOrderDataOfferOrder[] OfferOrder{get;set} } public partial class OrderOrderDataOfferOrder { public OrderOrderDataOfferOrderQuestion[] Question{get;set} } public partial class Order
public partial class OrderOrderData
{
public OrderOrderDataOfferOrder[] OfferOrder{get;set}
}
public partial class OrderOrderDataOfferOrder
{
public OrderOrderDataOfferOrderQuestion[] Question{get;set}
}
public partial class OrderOrderDataOfferOrderQuestion
{
public OrderOrderDataOfferOrderQuestionPrice Price{get;set;}
}
现在,我试图检索其问题。Price不等于null的报价人
例如,我在Offerder中有对象A、B和C。问题。C的价格不等于null,因此我的LINQ查询应该将offerderC
返回到pricedofferder
我试着用GroupBy做这件事,但没有找到运气。我正在尝试类似的方法,但仍然不知道在按问题分组后如何获得价格
OrderOrderData OrderData = order;
OfferOrder pricedOfferOrder = OrderData.OfferOrder.GroupBy(x=>x.Question)...
简单的方法在这里是足够的:
OrderOrderData OrderData = order;
OfferOrder pricedOfferOrder = OrderData.OfferOrder
.Where(d => d.Question.Any(e => e.Price != null));
在这种情况下,不需要使用GroupBy
。您可以尝试以下方法:
var offerOrder = OrderData.OfferOrder
.FirstOrDefault(oo => oo.Question.FirstOrDefault(q=>q.Price != null) != null );
本质上,我们使用FirstOrDefault
方法,该方法接受一个谓词,只要至少有一个项满足该谓词,这就是查询的结果。否则返回默认值,在本例中为null
。因此,我们正在寻找第一个报价人(如果有),其问题数组至少包含一个问题(非空),其价格不为空
有关此方法的更多信息,请查看。@JenishRabadiya更正!当Price
对于所有Question
为空时,ThanksI get对象引用未设置为对象的实例。我怎么能避免呢?这不可能发生!您是在查询IQuerable还是它只是linq to object?我的错,我实际上是在这样做offerder pricedofferder=OrderData.offerder.Where(d=>d.Question.Any(e=>e.Price!=null)).FirstOrDefault().Question)
Ok,这就是为什么如果Price对所有人都为null,那么offerder pricedofferder=OrderData.offerder.Where(d=>d.Question.Any(e=>e.Price!=null)).FirstOrDefault()将返回null,访问null上的属性问题将导致null引用异常。任何速记方法,LINQ方法可以避免这种情况吗?