2016-08-16 4 views
3

매개 변수가 전달되면 IQueryable을 반환하는 메서드가 있습니다. 이 모든 방법은 13 개의 개별 IQueryable을 생성하는 데 사용됩니다.단일 실행 시점에서 여러 IQueryable 실행

var foo = iQueryableObject.Count(); 
var bar = iSecondQueryableObject.Count(); 

것은 내가 모든 실행 싶습니다

내가 필요로 최종 결과는하지만 내 현재의 구현보다는이보다 효율적으로하려면 IQueryables 내에서 설정 내 기록의 13 개의 다른 수를 얻을 수 있습니다 이 같은 이론 뭔가 너무 실행의 단일 지점에서 SQL 서버의 수, :

var foobar = new IQueryable<object>[] 
{ 
    iQueryableObject.DeferredExecutionCount(), 
    iSecondQueryableObject.DeferredExecutionCount() 
}.ToList(); 

사람이 내가 이것을 달성 할 수있는 방법에 어떤 아이디어가 있습니까?

+0

는 [미래 쿼리] 봐 (https://github.com/loresoft/를 타고 EntityFramework.Extended/wiki/Future-Queries). –

+0

재미있을 것 같아. 내가 조사해 보겠다. 감사. – Lee

답변

1

실제 데이터베이스와 비교해야하지만 GroupByUnion (또는 Concat)을 사용하면이 작업을 수행 할 수 있습니다. 쿼리 이제

class Thing 
{ 
    public string One { get; set;} 
} 

class Thang 
{ 
    public string Two { get; set;} 
} 

:

은 다음과 포항 강판 (당신의 EF 엔티티를) 고려

var foo= Things 
    .Where(t => t.One == "One") //or whatever your filtering condition 
    .GroupBy(t => t.One) 
    .Select(t => new {Key = "FirstQuery", Count = t.Count()}); 

var bar = Thangs 
    .Where(t => t.Two == "Two") 
    .GroupBy(t => t.Two) 
    .Select(t => new {Key = "SecondQuery", Count = t.Count()}); 

var deferredCounts = foo.Concat(bar).ToList(); 
+0

그게 좋습니다. 나는 이것을 지금 시험해 보았고 요청 된대로 계산의 실행을 연기한다고 확인했다. 건배. – Lee

관련 문제