Matheus, your doubt is not necessarily about ASP.NET MVC
, but about Entity Framework
but could be applied to whatever ORM
.
LINQ
I would say that most of the time, you should opt for LINQ
, be it query syntax
or method syntax
, This makes your code cleaner, facilitates maintenance, etc.
LINQ - Query Syntax
using (var db = new dbEntities())
{
var query =
from m in db.Table
where m.Id == 1
select m;
}
LINQ - Method Syntax
using (var db = new dbEntities())
{
var query = db.Table.Where(x => x.Id == 1).Select(x => x);
}
In the case of method syntax
, the .Select(x => x)
is dispensable, is there only for demonstration purposes.
You want to know the difference between the two? No, the query syntax
will be transformed into method syntax
, see him as a syntactic sugar
, as well as the foreach
.
Entity SQL
But if you want to have a little more control, have the possibility to write your own query and that it works in whatever you want SGBD
, may choose to Entity SQL
.
using (var db = new dbEntities())
{
var esqlQuery = @"SELECT VALUE Entity FROM dbEntities.Table as Entity where Entity.Id = 1";
var query = new ObjectQuery<Contact>(esqlQuery, db, MergeOption.NoTracking);
}
I don’t know about the more current versions of EF
, but in older versions, the ExpressionTree
generated by IQueryable<T>
was first translated into Entity SQL
, to be converted to SQL Final.
In this case you would be skipping a step in the process, but particularly, I do not see a positive balance when changing the LINQ
for Entity SQL
.
SQL
Leave this option only if you need a fine-tuning in SQL, either because the query is too complex, the ORM is not delivering a satisfactory result, etc.
using (var ctx = new dbEntities())
{
var resultado = ctx.Table.SqlQuery("Select * from Table WHERE id = 1").ToList<Table>();
}
But keep in mind to use SQL Puro
within a ORM
will kill most of the advantages and resources of it, for example, a SQL
written for SQL Server
may not work for PosgreSQL
, while the LINQ
and the Entity SQL
will not face this kind of problem.
Completion
Give preference to the LINQ
, despite the potential of Entity SQL
, I don’t see much space for the same nowadays and reserve the SQL
, be it ANSI SQL
, TSQL
or PL/SQL
for special occasions.
When possible, always prefer to use language or framework syntax for queries, rather than pure SQL. Because there will be a much lower risk of problems with SQL Injection. You can also facilitate system portability with respect to DBMS.
– mau humor
Asp.net mvc 5 has several ways to select. This confuses me.
– Matheus Miranda