我正在使用Rob的LazyList实现,它运行良好。
但是,我无法使用.where子句处理LazyList类型的子实体。
例如。
之类的东西var qry = orderRepository.GetOrders();
qry = from p in qry where p.Items.Where(t => t.Name == "test") select p;
产生以下编译时错误:
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Items>' to 'bool'
查询子实体的正确方法是什么?
答案 0 :(得分:1)
您需要Any
。
var qry = orderRepository.GetOrders();
qry = from p in qry where p.Items.Any(t => t.Name == "test") select p;
你已经有了一个where子句,使用第二个子句将不会有任何好处。第一个(小写的)希望布尔值能够执行过滤,但是你提供IEnumerable<Items>
(因为这是第二个.Where
返回的内容)。 Any
与Where
的作用相同,但只要至少有一个项目与您指定的查询匹配,就会返回一个布尔值。
答案 1 :(得分:0)
不确定您要通过此声明实现的目标。
如果您希望所有订单的商品名称为“test”,请使用:
var qry = orderRepository.GetOrders();
qry = from p in qry where p.Items.Any(t => t.Name == "test") select p;
如果您想要所有名为“test”的项目,请使用:
var qry = orderRepository.GetOrders();
qry = from p in qry select p.Items.Where(t => t.Name == "test");