为了账号安全,请及时绑定邮箱和手机立即绑定

if 中的 LINQ where 子句条件

if 中的 LINQ where 子句条件

C#
元芳怎么了 2022-06-12 10:52:55
我有一个包含以下属性的类:public class Suborder{     public List<OrderLineItem> OrderLineItemList { get; set; }     public string ProviderCode { get; set; }}public class OrderLineItem{    public List<OrderLineItem> BundleComponentList { get; set; }    public string Product { get; set; }}我想遍历 BundleComponentList 以检查它的任何项目是否具有等于 Shoes 的 Product 值。我试过这样但收到错误if (suborder.OrderLineItemList.Any(x => x.Product == "Shoes") || suborder.OrderLineItemList.Where(x=>x.BundleComponentList.Any(y=>y.Product == "Shoes")))运算符“||” 不能应用于“bool”和“System.Collections.Generic.IEnumerable”类型的操作数我的 LINQ 有什么问题?
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

使用Any而不是WhereasWhere返回一个序列,而不是一个bool.

suborder.OrderLineItemList.Any(x => x.BundleComponentList.Any(y => y.Product == "Shoes")))



查看完整回答
反对 回复 2022-06-12
?
九州编程

TA贡献1785条经验 获得超4个赞

我会将 lambda 与 LINQ 结合起来。更容易阅读和查看发生了什么:


var orders = from o in suborder.OrderLineItemList

             where

               o.Product == "Shoes" ||

               o.BundleComponentList.Any(c => c.Product == "Shoes")

             select o;


bool isShoesOrder = orders.Any();


查看完整回答
反对 回复 2022-06-12
?
RISEBY

TA贡献1856条经验 获得超5个赞

Where()不返回布尔值,而是返回 an IEnumerable,因此不能在 if 子句中使用。你应该Any()在你的情况下使用。

if (suborder.OrderLineItemList.Any(x => x.Product == "Shoes") || 
    suborder.OrderLineItemList.Any(x => x.BundleComponentList.Any(y => y.Product == "Shoes")))

另请注意,上述 if 子句假定 suborder 永远不会为空。


查看完整回答
反对 回复 2022-06-12
  • 3 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号