使linq尽可能避免在内存过滤中使用

时间:2010-03-03 17:40:40

标签: performance linq-to-sql iqueryable

考虑这两种LINQ2SQL数据检索方法。第一个创建一个过滤数据的“正确”SQL语句,但需要将数据上下文传递给方法。

第二个语法更好,但加载了该帐户项目的整个列表,然后进行内存过滤。

有没有办法保留第二种方法的语法,但具有第一种方法的性能优势?

public partial class Account
{
    public IQueryable<Project> GetProjectsByYear(LinqDataContext context, int year)
    {
        return context.Projects.Where(p => p.AccountID==this.AccountID &&  p.Year==year).OrderBy(p => p.ProjectNo)
    }

    public IQueryable<Project> GetProjectsByYear(int year)
    {
        return this.Projects.Where(p => p.Year==year).OrderBy(p => p.ProjectNo).AsQueryable()
    }
}

1 个答案:

答案 0 :(得分:0)

我不是专家,所以这可能不是最好的方法,但是,

你可以将LinqDataContext添加到你的类(帐户),在构造函数中初始化它,这样你的函数可以使用它而不必将它作为参数传递