将Linq表达式转换为使用CompiledQuery



我正试图找出如何将Linq表达式转换为CompiledQuery这是我想转换的现有方法

public IList<Item> GetAllItems()
{
    using (var pos = new ABCEntities())
    {
        var qryAllItems = from itm in pos.Items.Where(o=>o.Is_Inactive==false)
            select itm;
        return qryAllItems.ToList();
    }
}

我假设这是实体框架,因为你的上下文类被称为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.

我还删除了fromselect,因为当您使用该扩展方法语法时不需要它们。我也可以这样做:

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;

但是我个人大多数时候更喜欢使用扩展方法

相关内容

  • 没有找到相关文章