只是想知道将以下SQL转换为LINQ to SQL的最佳(最快执行时间)方法是什么?
IF EXISTS (SELECT TOP 1 * FROM HealthIndicators WHERE LogDate = getdate())
UPDATE HealthIndicators SET Timeouts = 32
ELSE INSERT INTO HealthIndicators (Timeouts, 32)
如果这是一个转贴我很抱歉,但我无法找到关于这个主题的答案(我是新人,请你好!)
答案 0 :(得分:2)
var d = DateTime.Today; // or .Now
if (db.HealthIndicators.FirstOrDefault(h => h.LogDate == d) != null)
// or Any(h => h.LogDate == d)
{
// update
}
else
{
// insert
}
答案 1 :(得分:1)
我只想在上面的答案中添加一个项目。上面的答案使用DateTime.Today,它使用运行代码的机器上的时间而不是从Sql Server获取时间的getdate()。如果您的应用程序具有单独的数据库服务器,则此问为此,您必须将以下功能添加到ORM。
[Function(Name="GetDate", IsComposable=true)]
public DateTime GetSystemDate()
{
MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo;
return (DateTime)this.ExecuteMethodCall(this, mi, new object[]{}).ReturnValue;
}