How do I improve the efficiency of the queries executed by this generic Linq-to-SQL data access clas

Posted by Lee D on Stack Overflow See other posts from Stack Overflow or by Lee D
Published on 2010-04-16T10:30:01Z Indexed on 2010/04/16 10:33 UTC
Read the original article Hit count: 320

Filed under:
|
|
|
|

Hi all,

I have a class which provides generic access to LINQ to SQL entities, for example:

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);
    }
}

From the front end, both of these methods appear to work as you would expect. However, when I run a trace in SQL profiler, the Single method is executing what amounts to a SELECT * FROM [Table], and then returning the single entity that meets the given condition. Obviously this is inefficient, and is being caused by GetTable() returning all rows.

My question is, how do I get the query executed by the Single() method to take the form SELECT * FROM [Table] WHERE [condition], rather than selecting all rows then filtering out all but one? Is it possible in this context?

Any help appreciated,

Lee

© Stack Overflow or respective owner

Related posts about linq-to-sql

Related posts about sql