如何将此转换为 SQL 到 LINQ?

3

我想知道将以下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)

如果这是一篇重复发帖,我深表歉意,但我没有找到关于这个问题的答案(我是新手,请多关照!)

2个回答

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
}

哇,太快了。这超出了我对Linq to SQL的了解,但肯定促使我更多地学习,谢谢你。 - Michael A
@Michael:很高兴能帮忙 :) 顺便说一下,我希望你使用实体框架而不是LINQ to SQL,因为前者比后者更具有特色(并且是更真正的ORM)。 - abatishchev
我已经开始实现了,但是Visual Studio在使用.Any()时出现了语法错误 - 我需要包含哪个库才能使用它? - Michael A

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; 
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接