Linq vs. ADO.NET

Sunday, November 25, 2007 7:29:27 PM (Mitteleuropäische Zeit, UTC+01:00)

Heute habe ich eine SQLRoleProvider Klasse von ADO.NET auf LINQ umgestellt.
Die beiden folgenden Codebeispiele machen genau das gleiche.
An diesem Beispiel wird deutlich wie effektiv LINQ sein kann.

ADO.NET Variante:

bool exists = false;
connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Roles WHERE Rolename = @Rolename", conn);

cmd.Parameters.Add("@Rolename", SqlDbType.VarChar, 255).Value = rolename;
cmd.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 255).Value = ApplicationName; 

conn.Open(); // try catch finally hab ich für dieses Beispiel entfernt
int numRecs = (int) cmd.ExecuteScalar();
conn.Close();
if (numRecs > 0)
       exists = true;
return exists;


Linq Variante:

private DataContext db = new DataContext();
var roleCount = (from r in db.Roles
         where r.Rolename == rolename
         select r).Count();

return (roleCount > 0);

Der von der Linq Abfrage erzeugte SQL Code sieht dann so aus:

SELECT [t0].[ID], [t0].[Rolename]
FROM [dbo].[Roles] AS [t0]
WHERE [t0].[Rolename] = @p0

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Wednesday, December 05, 2007 1:17:22 PM (Mitteleuropäische Zeit, UTC+01:00)
Effektiv eher nicht, kürzer. Bei der ADO-Version findet die Zählung auf dem Server statt, bei DLINQ auf dem Client. Man stelle sich vor, die Ergebnismenge beträgt (Hundert-) Tausende von Zeilen, die zuerst zum Client geschaufelt werden müssen, um dort eine schlichte Zählung zu veranstalten. Die Performance dürfte also um einiges bescheidener ausfallen.
Svenson
Comments are closed.