2013-05-30 6 views
2

데이터베이스를 한 번만 쿼리하는 엔터티 프레임 워크 쿼리로 전환 할 수 있습니까?여러 테이블에서 최대 날짜 선택

select max(TableADate) latestTableADate, max(TableBDate) latestTableBDate 
    from 
    (
     select max(a.ModifiedDate) TableADate, null TableBDate 
     from TableA a 

     union all 

     select null, max(b.ModifiedDate) 
     from TableB b 
) data 

의도는 엔티티 프레임 워크는 데이터를 얻기 위해 데이터베이스에 여러 여행을하고되지 않도록 하나의 SQL 문을 사용하여 여러 테이블에서 최신 ModifiedDate를 얻는 것입니다.

테이블 중 하나가 마지막으로 업데이트 된시기를 알아야합니다.

업데이트 : 다음을 수행 DbContext.Database.SqlQuery을 사용하여 종료

는 :

var output = db.Database.SqlQuery<DateTime> 
        ("select data from (" + 
        "select 1 orderBy, max(ModifiedDate) data from TableA" + 
        "union all " + 
        "select 2, max(ModifiedDate) from TableB " + 
        ") temp order by orderby").ToList(); 


    data.TableADate = output[0]; 
    data.TableBDate = output[1]; 
+0

EF로이 작업을 수행 할 수 있는지 여부는 확실하지 않지만 데이터베이스에'보기 '를 작성하여 확실히 수행 할 수 있습니다. – paul

+0

네, 생각하고 있었지만 선택할 수있는 항목이 무엇인지보고 싶었습니다. 다른 접근 방식의 장단점을 살펴보십시오. – SBurris

답변

1

당신은 당신이 DbContext.Database.SqlQuerymethod를 사용하여 열거 한 것과 유사한 쿼리를 실행할 수 있습니다. 어떤 순서로 날짜를 반환하거나 out parameters을 사용하려면 날짜를 변경해야합니다.