Linq to Entities查询真的很慢。我能做什么?

时间:2015-07-09 19:59:08

标签: c# linq entity-framework

我使用C#进行Linq-to-Entities查询。

var query = from a in dbc.AcopioVias
            join b in dbc.Comunas on a.IdComuna equals b.Id
            join c in dbc.TipoViaCorrectoes on a.IdTipoViaCorrecto equals c.Id
            join d in dbc.ViaCorrectoes on a.IdViaCorrecto equals d.Id
            join e in dbc.ViaIncorrectoes on a.IdViaIncorrecto equals e.Id
            where b.CodCut.Contains(cut)
               && e.NombreVia_I.Contains(posibleNombreVia)
            select new
                   {
                      c.TipoVia_C,
                      d.NombreVia_C
                   };

string tv = null;
string nv  = null;

foreach (var item in query)
{
    tv = item.TipoVia_C;
    nv = item.NombreVia_C;
}

我的问题,很慢。我需要查询每条记录,它可能是900.000条记录!对于我需要查询的每条记录。

我可以做些什么来提高查询速度?

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果要加快查询速度,应使用已编译的查询。语法不是很漂亮,但效率很高。

以下是它的工作原理

  1. 您创建一个公共静态委托Func方法:

  2. 然后通过调用CompiledQuery静态类的Compile方法来定义委托的值

  3. 像任何其他委托方法一样调用公共静态Func方法

  4. 以下是一个示例,假设您想从ID获取客户端名称,它看起来就像那样

        public static Func<DataContext, int /*input type*/, string /*output type*/> GetId =
            CompiledQuery.Compile((DataContext db, int id) =>   
               from customer in  Db   
               where customer.id == id  
               select customer.name );  
    
        GetId(dataContext, CustomerId);
    

    如果您不知道Func1方法,请参阅here
    这里有一些关于CompiledQuery的高级教程,请参阅Here