【问题标题】:How does this translate to SQL to LINQ?这如何转换为 SQL to LINQ?
【发布时间】:2012-02-26 22:03:30
【问题描述】:

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

如果这是转发,我深表歉意,但我无法找到有关该主题的答案(我是新手,请善待!)

【问题讨论】:

    标签: c# sql linq sql-server-2008 linq-to-sql


    【解决方案1】:
    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:很高兴为您提供帮助 :) 顺便说一句,我希望您使用 Entity Framework 而不是 LINQ to SQL,因为第一个功能更丰富(并且是更真实的 ORM)然后是第二个
    • 我已经实现了这个,但 Visual Studio 出现了 .Any() 的语法错误 - 我需要包含什么库才能使用它?
    【解决方案2】:

    我只想在上面的答案中再添加一项。上面的答案使用 DateTime.Today ,它使用运行代码的机器上的时间,而不是 getdate() ,后者从 Sql Server 获取时间。如果您的应用程序有一个单独的数据库服务器,这可能很重要。为此,您必须将以下函数添加到您的 ORM。

    [Function(Name="GetDate", IsComposable=true)] 
     public DateTime GetSystemDate() 
     {   
        MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo;   
        return (DateTime)this.ExecuteMethodCall(this, mi, new object[]{}).ReturnValue; 
     }
    

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2020-08-28
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多