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