2012-02-04 5 views
3

Просто интересно, какое лучшее (самое быстрое время выполнения) метод для перевода следующего SQL в LINQ to SQL?Как это перевести на SQL в LINQ?

IF EXISTS (SELECT TOP 1 * FROM HealthIndicators WHERE LogDate = getdate()) 
    UPDATE HealthIndicators SET Timeouts = 32 
ELSE INSERT INTO HealthIndicators (Timeouts, 32) 

Я прошу прощения, если это репост, но я не смог найти ответ на эту тему (я новичок, пожалуйста, быть хорошо!)

ответ

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 
} 
+0

Ничего себе, так быстро. Это выше моих знаний о linq для sql, но определенно побуждает меня изучать больше, спасибо – Codingo

+0

@Michael: Рад помочь :) btw Надеюсь, вы используете Entity Framework, а не LINQ to SQL, поскольку первый из них более функционально (и является более реальным ORM), а затем второй – abatishchev

+0

. Я пошел реализовать это, но Visual Studio придумывает синтаксическую ошибку для .Any() - какую библиотеку мне нужно включить, чтобы использовать ее? – Codingo

1

Я бы просто добавить еще один пункт ответа выше. В приведенном выше ответе используется 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; 
} 
Смежные вопросы