。懒惰列表无法正常工作

时间:2009-02-27 08:43:42

标签: linq

我正在使用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'

查询子实体的正确方法是什么?

2 个答案:

答案 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返回的内容)。 AnyWhere的作用相同,但只要至少有一个项目与您指定的查询匹配,就会返回一个布尔值。

答案 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");