LINQ多重过滤最快的方式

时间:2014-11-14 11:10:23

标签: c# performance linq linq-to-sql

将通过asp.net应用程序中的对象数据源调用此代码。 在northwind数据库中,存在一个名为Customer的表。所以我想过滤网格视图,如下所示:

enter image description here

如上图所示,网格视图顶部有两个下拉菜单。他们将使用ContactTitle和Country Columns过滤Gridview,所以,我已经在DAL中写了代码,如下所示:

var q = (from customers in db.Customers
                         select new
                         {
                             customers.ContactName,
                             customers.ContactTitle,
                             customers.City,
                             customers.Country,
                             customers.Phone,
                             customers.Address
                         });
            if (!country.Equals("All")) q = q.Where(e => e.Country == country);
            if (!contactTitle.Equals("All")) q = q.Where(e => e.ContactTitle == contactTitle);

所以代码工作得很好,但是这段代码会调用数据库连接三次!一个用于选择全部,第二个用于过滤国家,第三个用于过滤联系人标题,如何将此查询优化为一个查询?

我的第二个问题是:如何在不再查询的情况下删除Dropdown中的重复值?我不想使用select Distinct或其他查询....我可以这样的东西: (注意DropDowns被绑定到数据库......)

OnDataBind (e) {
  if(!DropDown1.Contains(e.value)) DropDown1.Add(e.Value);
}

更新:

var q =(来自db.Customers中的客户              where(country.Equals(“All”)|| customers.Country == country)&&                    (contactTitle.Equals(“All”)|| customers.ContactTitle == contactTitle)

             select new
             {
                 customers.ContactName,
                 customers.ContactTitle,
                 customers.City,
                 customers.Country,
                 customers.Phone,
                 customers.Address
             });

上面的代码会做同样但不会更快,因为第一个代码是Linq To Object!

0 个答案:

没有答案