Linq-to-SQL EntitySet不是IQueryable - 任何解决方法?

Pet*_*ete 8 linq-to-entities linq-to-sql

在Linq-to-SQL中查询模型对象上的EntitySet属性时,它将返回实体集中的所有行,并进一步查询客户端.

这在网上的一些地方得到了证实,我自己也观察到了这种行为.EntitySet不实现IQueryable.

我必须做的是转换代码,如:

var myChild = ... ;
// Where clause performed client-side.
var query = myChild.Parents().Where(...) ;  
Run Code Online (Sandbox Code Playgroud)

至:

var myChild = ... ;
// Where clause performed in DB and only minimal set of rows returned.
var query = MyDataContext.Parents().Where(p => p.Child() == myChild) ;  
Run Code Online (Sandbox Code Playgroud)

有谁知道更好的解决方案?

第二个问题:这是在实体框架中修复的吗?

mik*_*igs 5

EntitySet只是实体的集合.它实现IEnumerable,而不是IQueryable.Active Record模式指定实体直接负责自己的持久性.OR映射器实体不具有持久层的任何直接知识.或者Mappers将此职责以及工作单元和身份映射职责放入数据上下文中.因此,如果需要查询数据源,则必须使用上下文(或Table对象).要改变这种情况会使使用中的图案变形.

  • 我明白了这一点.不过,他们确实在linq-to-sql的早期测试版中启用了这一功能.也许问题是我更喜欢常用的另一种模式!我发现无论如何我需要撕掉大量的l2s并用旧的老式手写SQL和普通对象替换. (2认同)