C# 使用Linq更新SQL Server数据库的更好方法是什么?
我正在使用SQLServer2012和LINQtoSQL 我有这个方法在检查了一些条件后更新数据库中的一行 我用两种方式写的。哪一个更快、资源密集度更低?(SQL查询、CPU计数…) 问题#1: 在这篇文章中,我使用了C# 使用Linq更新SQL Server数据库的更好方法是什么?,c#,.net,sql-server,performance,linq,C#,.net,Sql Server,Performance,Linq,我正在使用SQLServer2012和LINQtoSQL 我有这个方法在检查了一些条件后更新数据库中的一行 我用两种方式写的。哪一个更快、资源密集度更低?(SQL查询、CPU计数…) 问题#1: 在这篇文章中,我使用了IEnumerable internal static bool CheckSecretCodeLoginkError(String License, String SecretCode, DataClasses1DataContext db) { IEnumerable&
IEnumerable
internal static bool CheckSecretCodeLoginkError(String License, String SecretCode, DataClasses1DataContext db)
{
IEnumerable<User> user = db.Users.Where(a => a.Licensekey == License).Select(a => a);
if (SecretCode != user.First().SecretCode && !user.First().SkipSecretCode)
{
if (user.First().LastSecretChangeDate > DateTime.UtcNow - TimeToPreventSecretCodeChange)
{
//secret error
return true;
}
else
{
//no error
//update secret code and last change
user.First().LastSecretChangeDate = DateTime.UtcNow;
user.First().SecretCode = SecretCode;
db.SubmitChanges();
return false;
}
}
else
{
return false;
}
}
我将使用查询#2-并进行调整:
internal static bool CheckSecretCodeLoginkError(String License, String SecretCode, DataClasses1DataContext db)
{
// you store a reference in "user" here.....
User user = db.Users.Where(a => a.Licensekey == License).Single();
if (SecretCode != user.SecretCode && !user.SkipSecretCode)
{
if (user.LastSecretChangeDate > DateTime.UtcNow - TimeToPreventSecretCodeChange)
{
//secret error
return true;
}
else
{
//no error
//update secret code and last change
// **REUSE** that reference you stored above!!
// Don't call .Where(...).Select(....).First() again!
user.LastSecretChangeDate = DateTime.UtcNow;
user.SecretCode = SecretCode;
db.SubmitChanges();
return false;
}
}
else
{
return false;
}
}
您正在存储在
user
中方法开始时找到的单个用户-为什么在更新时再次调用整个凌乱的LINQ表达式?!?!只需使用您已有的参考用户
为什么不自己测量一下呢?我将删除我的答案,并在这里留下一条评论:您可以自己查看Linq to SQL thank You@StephenKennedy生成的SQL
internal static bool CheckSecretCodeLoginkError(String License, String SecretCode, DataClasses1DataContext db)
{
// you store a reference in "user" here.....
User user = db.Users.Where(a => a.Licensekey == License).Single();
if (SecretCode != user.SecretCode && !user.SkipSecretCode)
{
if (user.LastSecretChangeDate > DateTime.UtcNow - TimeToPreventSecretCodeChange)
{
//secret error
return true;
}
else
{
//no error
//update secret code and last change
// **REUSE** that reference you stored above!!
// Don't call .Where(...).Select(....).First() again!
user.LastSecretChangeDate = DateTime.UtcNow;
user.SecretCode = SecretCode;
db.SubmitChanges();
return false;
}
}
else
{
return false;
}
}