【发布时间】:2015-10-06 18:22:22
【问题描述】:
使用 Linq,很容易执行一个函数来投影一个 IEnumerable。
var orders = new List<Order>();
orders.Where(x => x.Id > 50).Select(x => new SomethingElse(x.Name));
使用 EntityFramework 和 IQueryable,这是不可能的。相反,您会在运行时获得不受支持的异常,因为您不能在 Select 中拥有函数。
不起作用:
var db = new Order(); db.MyEntities.Where(x => x.Id > 50).Select(x => new SomethingElse(x.Name)).Take(10);
是否存在,或者是否有可能为上述工作创建一种方式?
我知道它不起作用,因为它无法将函数转换为 SQL 可以理解的东西,但是,如果有一个名为“Execute”的扩展方法可以在执行之前和之后的所有 linq 之后在内存中执行,会那行吗?
数据库只会拉 > 50 并且只有 TOP 10,只有在它之后才会是
var db = new Order(); db.MyEntities.Where(x => x.Id > 50).Execute(x => new SomethingElse(x.Name)).Take(10);
澄清一下:要求是即使在 Sleect() 之后也将其保持为 IQueryable
【问题讨论】:
标签: c# entity-framework iqueryable func