我有一个类,它提供对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]
形式,而不是选择所有行,然后过滤除一个以外的所有行?在这种情况下是否可能?
任何帮助表示感谢。
答案 0 :(得分:3)
将Func<...>
替换为Expression<Func<...>>
。
答案 1 :(得分:0)
这是一篇非常冗长的文章,但它可能是一个好的开始。它提供了一些建议。
http://visualstudiomagazine.com/articles/2007/11/01/optimize-linq-to-sql-performance.aspx