我试图通过EF返回的结果中过滤下来到只有那些有关 - 在下面那些在一年(formattedYear)和订单类型的例子(filtOrder)过滤实体框架的图形对象
我有一个简单的一组对象
PEOPLE 1-M订单1-M的ORDERLINES
与在Model.edmx已经定义这些关系
在SQL我会做这样的事情......
SELECT * FROM人民内的连接顺序上ORDERS.PEOPLE_RECNO = PEOPLE.RECORD_NUMBER 内上ORDERLINE.ORDER_RECNO = ORDERS.RECORD_NUMBER加入ORDERLINE 其中[email protected] 和[email protected]
我试过几个方法...
var y = _entities.PEOPLE.Include("ORDERS").Where("it.ORDERS.ORDER_KEY=" + filtOrder.ToString()).Include("ORDERLINEs").Where("it.ORDERS.ORDERLINEs.SERVICE_YEAR='" + formattedYear + "'");
var x = (from hp in _entities.PEOPLE
join ho in _entities.ORDERS on hp.RECORD_NUMBER equals ho.PEOPLE_RECNO
join ol in _entities.ORDERLINEs on ho.RECORD_NUMBER equals ol.ORDERS_RECNO
where (formattedYear == ol.SERVICE_YEAR) && (ho.ORDER_KEY==filtOrder)
select hp
);
Ÿ失败ORDER_KEY不是transient.collection的一员...... 和X返回正确的人,但他们都他们的订单附 - 不只是我所追求的。
我想我错过了一些简单的东西?
看起来不错,但是,如果你需要在另一个方法中使用结果(想象这是在DAL中完成的),使用匿名对象可能是个问题......难道不可能返回一个People对象吗?我们会失去应用于订单的过滤器吗? – 2010-07-28 13:00:24
克雷格 - 是的,我明白,但要避免匿名对象的原因朱利安提到的原因。我只是希望我的存储库能够返回具有正确数据的人员,并将其交给强制类型的视图,而在其他情况下,这些视图可能与整个数据集一起工作。 – Andiih 2010-07-28 13:09:04
如果需要,您可以返回POCO而不是匿名类型(只需在'new'和'{')之间输入类型名称“即可)。但是,您不能返回实体类型,因为EF不允许部分构造的实体。 – 2010-07-28 13:14:36