2016-08-16 15 views
3

我有一個方法,當傳遞參數時返回一個IQueryable。在所有這些方法中用於生成13個獨立的IQueryable。在單個執行點運行多個IQueryable的

最終的結果我要求是讓我的記錄IQueryables內設置的13張不同的數,然而,爲了使這個比我當前的實現是更有效的:

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

我想所有運行理論上是這樣的,在執行單點SQL服務器上的計數,所以:

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

沒有人有任何想法,我怎麼能做到這一點?

+0

看看[將來的查詢(https://github.com/loresoft/ EntityFramework.Extended /維基/未來的查詢)。 –

+0

看起來很有趣,我會檢查一下。謝謝。 – Lee

回答

1

您必須針對實際數據庫嘗試此操作,但您可以使用GroupByUnion(或Concat)來實現此目的。

考慮以下波蘇斯(你EF實體):

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

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

現在您的疑問:

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