如何提高此通用Linq-to-SQL数据访问类执行的查询的效率?

时间:2010-04-16 10:30:01

标签: c# sql performance linq-to-sql

我有一个类,它提供对LINQ to SQL实体的通用访问,例如:

class LinqProvider<T> //where T is a L2S entity class
{
    DataContext context;

    public virtual IEnumerable<T> GetAll()
    {
        return context.GetTable<T>();
    }

    public virtual T Single(Func<T, bool> condition)
    {
        return context.GetTable<T>().SingleOrDefault(condition);
    }
}

从前端开始,这两种方法似乎都可以正常运行。但是,当我在SQL事件探查器中运行跟踪时,Single方法执行的数量等于SELECT * FROM [Table],然后返回满足给定条件的单个实体。显然这是低效的,并且是由GetTable()返回所有行引起的。

我的问题是,如何让Single()方法执行的查询采用SELECT * FROM [Table] WHERE [condition]形式,而不是选择所有行,然后过滤除一个以外的所有行?在这种情况下是否可能?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:3)

Func<...>替换为Expression<Func<...>>

答案 1 :(得分:0)

这是一篇非常冗长的文章,但它可能是一个好的开始。它提供了一些建议。

http://visualstudiomagazine.com/articles/2007/11/01/optimize-linq-to-sql-performance.aspx