此LINQ查询是否在每个筛选器上调用数据库?

时间:2010-11-19 05:05:16

标签: linq filter

dataGridView1.DataSource = (from x in db.Employees
                            where x.FirstName.Contains(textBox1.Text)
                            select x);

我在txtSearch_TextChanged事件中使用上述表达式来实时过滤结果。每次按下一个键来获取结果时,这是否会调用数据库?或者是以某种方式将结果缓存在内存中并进行过滤和返回?这是在LINQ中像这样做一些实时过滤器的正确方法吗?

Northwind db = new Northwind(@"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");


private void txtSearch_TextChanged(object sender, EventArgs e)
    {

        dataGridView1.DataSource = (from x in db.Employees
                                    where x.FirstName.Contains(textBox1.Text)
                                    select x);

    }

1 个答案:

答案 0 :(得分:1)

是的...如果每按一次键就调用一次,每按一次键就会查询数据库。

但更糟糕的是 - LINQ每次都必须将该表达式编译成SQL,这也是一项重要的工作。

所以不 - 这不是正确的做法。您应该首先在客户端上缓存数据以执行自动完成...或者至少仅在两个字符左右后开始拉(然后缓存),这样您就可以将结果限制为缓存。