一千萬個為什麽

搜索

如何提高此通用Linq-to-SQL數據訪問類執行的查詢的效率?

我有一個類,它提供對LINQ to SQL實體的泛型訪問,例如:

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

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

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

從前端開始,這兩種方法似乎都可以正常工作。但是,當我在SQL事件探查器中運行跟蹤時,Single方法執行的操作相當於 SELECT * FROM [Table] ,然後返回滿足給定條件的單個實體。顯然這是低效的,並且是由 GetTable()返回所有行引起的。

我的問題是,如何通過 Single()方法執行查詢以獲取 SELECT * FROM [Table] WHERE [condition] 形式,而不是全部選擇行然後過濾除了一個?在這種情況下有可能嗎?

任何幫助贊賞。

最佳答案

Replace Func<...> with Expression>.

轉載註明原文: 如何提高此通用Linq-to-SQL數據訪問類執行的查詢的效率?