Наиболее очевидные различия:
Linq to Entities - это строго типизированный код с хорошим синтаксисом понимания запросов. Тот факт, что «от» предшествует «выбору», позволяет IntelliSense помочь вам.
Entity SQL использует традиционные строковые запросы с более знакомым SQL-подобным синтаксисом, где оператор SELECT предшествует FROM. Поскольку eSQL основан на строках, динамические запросы могут быть составлены традиционным способом во время выполнения, используя манипуляции со строками.
Менее очевидное ключевое отличие:
Linq to Entities позволяет вам изменить форму или «спроецировать» результаты вашего запроса на любую нужную вам форму с помощью синтаксиса «select new {...}». Анонимные типы, впервые появившиеся в C # 3.0, позволили это.
Проецирование невозможно с использованием Entity SQL, поскольку вы всегда должны возвращать ObjectQuery . В некоторых сценариях возможно использовать ObjectQuery , однако вы должны обойти тот факт, что .Select всегда возвращает ObjectQuery . Смотрите код ниже ...
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;
}
Существуют и другие, более тонкие различия, подробно описанные одним из членов команды здесь и здесь .