2012-02-04 3 views
3

다음 SQL을 LINQ to SQL로 변환하는 가장 빠른 (가장 빠른 실행 시간) 방법이 무엇인지 궁금하십니까?이것은 어떻게 LINQ로 SQL로 변환됩니까?

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

나는 이것이 재 게시 경우 사과하지만 난 주제 (I 새로운 해요, 좋은주세요!)

답변

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 저는 LINQ보다는 SQL에 이르기까지 Entity Framework를 사용하기를 희망합니다. (그리고 더 실제 ORM입니다) 두 번째 – abatishchev

+0

나는 이것을 구현했지만 Visual Studio에서 .Any()에 대한 구문 오류가 나타나고 있습니다. 이것을 활용하려면 어떤 라이브러리를 포함해야합니까? – Codingo

1

난 그냥 추가 할에 대한 답을 찾을 수 없어 위의 답변에 하나 이상의 항목이 있습니다. 위의 대답은 SQL Server에서 시간을 가져 오는 getdate() 대신 코드가 실행되는 컴퓨터의 시간을 사용하는 DateTime.Today를 사용합니다. 애플리케이션에 별도의 데이터베이스 서버가있는 경우 문제가 될 수 있습니다. 이렇게하려면 다음 함수를 ORM에 추가해야합니다.

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