Las diferencias más obvias son:
LINQ a Entidades está fuertemente tipado código que incluya buena comprensión de sintaxis de la consulta. El hecho de que el "desde" aparece antes que el "seleccionar" permite que IntelliSense lo ayude.
Entity SQL utiliza consultas tradicionales basadas en cadenas con una sintaxis similar a SQL más familiar, donde la instrucción SELECT aparece antes que FROM. Debido a que eSQL está basado en cadenas, las consultas dinámicas pueden estar compuestas de manera tradicional en tiempo de ejecución utilizando la manipulación de cadenas.
La diferencia clave es menos obvio:
LINQ a Entidades le permite cambiar la forma o el "proyecto" los resultados de la consulta en cualquier forma que se desee con la opción “Seleccionar nueva {...}” Sintaxis . Los tipos anónimos, nuevos en C# 3.0, han permitido esto.
La proyección no es posible utilizando Entity SQL, ya que siempre debe devolver un ObjectQuery <T>. En algunos casos, es posible utilizar ObjectQuery <objeto>, sin embargo debe evitar el hecho de que .Select siempre devuelve ObjectQuery <DbDataRecord>. Ver código de abajo ...
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;
}
Hay otras diferencias más sutiles descritos por uno de los miembros del equipo en detalle here y here.