我假设这是实体框架,因为您的上下文类称为 ABC Entities。
创建一个私有静态字段来保存您编译的查询委托,然后使用该CompiledQuery.Compile()
方法对其进行初始化(为了简洁起见,我选择在字段初始化程序中这样做......它可以在静态构造函数中完成,或者在第一次时懒惰地完成称为等)。然后在调用时调用委托GetAllItems()
。
private static Func<ABCEntities, IQueryable<Item>> _activeItemsQuery =
CompiledQuery.Compile<ABCEntities, IQueryable<Item>>(
(pos) => pos.Items.Where(o=>o.Is_Inactive==false));
public IList<Item> GetAllItems()
{
using (var pos = new ABCEntities())
{
return _activeItemsQuery(pos).ToList();
}
}
更多关于 EF 编译查询的信息:http: //msdn.microsoft.com/en-us/library/bb896297.aspx。
我还删除了您的from
andselect
因为当您使用该扩展方法语法时不需要它们。我本可以交替做:
private static Func<ABCEntities, IQueryable<Item>> _activeItemsQuery =
CompiledQuery.Compile<ABCEntities, IQueryable<Item>>(
(pos) => from itm in pos.Items where itm.Is_Inactive == false select itm;
但我个人大部分时间更喜欢使用扩展方法。