Linq to Entities与ESQL的性能

Bra*_*ach 18 linq-to-entities entity-framework entity-sql

使用实体框架时,ESQL的性能是否优于Linq to Entities?

我更喜欢使用Linq to Entities(主要是因为强类型检查),但我的其他一些团队成员都将性能作为使用ESQL的理由.我想充分了解使用这两种方法的专家/骗子.

Roy*_*hay 17

最明显的区别是:

Linq to Entities是强类型代码,包括很好的查询理解语法.事实上,"from"出现在"select"之前,IntelliSense可以帮助您.

实体SQL使用传统的基于字符串的查询,使用更熟悉的SQL语法,其中SELECT语句位于FROM之前.因为eSQL是基于字符串的,所以动态查询可以在运行时使用字符串操作以传统方式组合.

不太明显的关键区别是:

Linq to Entities允许您更改形状或将查询结果"投影"为"select new {...}"语法所需的任何形状.匿名类型,C#3.0的新手,已经允许这样做.

使用Entity SQL无法进行投影,因为您必须始终返回ObjectQuery <T>.在某些情况下,可以使用ObjectQuery <object>,但是您必须解决.Select始终返回ObjectQuery <DbDataRecord>这一事实.见下面的代码......

ObjectQuery<DbDataRecord> query = DynamicQuery(context,
        "Products",
        "it.ProductName = 'Chai'",
        "it.ProductName, it.QuantityPerUnit");

public static ObjectQuery<DbDataRecord> DynamicQuery(MyContext context, string root, string selection, string projection)
{
    ObjectQuery<object> rootQuery = context.CreateQuery<object>(root);
    ObjectQuery<object> filteredQuery = rootQuery.Where(selection);
    ObjectQuery<DbDataRecord> result = filteredQuery.Select(projection);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这里这里,其中一个团队成员详细描述了其他更微妙的差异.