gpt4 book ai didi

c# - 使用 Linq 更新 SQL Server 数据库的更好方法是什么?

转载 作者:行者123 更新时间:2023-11-30 17:46:10 25 4
gpt4 key购买 nike

我正在使用 SQL Server 2012 和 Linq-to-SQL。

我有这种方法可以在检查一些条件后更新数据库中的一行。

我用两种方式写的。哪个更快,资源占用更少? (SQL 查询、CPU 计数...)

查询#1:

在这一个中我使用了 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)
{
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
db.Users.Where(a => a.Licensekey == License).Select(a => a).First().LastSecretChangeDate = DateTime.UtcNow;
db.Users.Where(a => a.Licensekey == License).Select(a => a).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 表达式?!?!只需使用您已有的引用 user 即可!

关于c# - 使用 Linq 更新 SQL Server 数据库的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26573450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com