2016-02-25 52 views
1

我有這樣的DocumentDB爲了在DocumentDB結果

{ 
    "Code": "123456", 
    "ScanLog": [ 
    { 
     "TimeStamp": 20160224115507 
    }, 
    { 
     "TimeStamp": 20160224115641 
    } 
    ] 
    "LastScanTimeStamp": 20160224115641 
} 

我在C#使這個LINQ查詢一些文件:

var Query = client.CreateDocumentQuery().OrderByDescending(c => c.LastScanTimeStamp).SelectMany(a => a.ScanLog.Select(b => new { Code = a.Code, TimeStamp = b.TimeStamp })).AsDocumentQuery(); 
    var feedResp = await Query.ExecuteNextAsync(); 

,這是結果:

[ 
    { 
    "Code": "123456", 
    "TimeStamp": 20160224115507 
    }, 
    { 
    "Code": "123456", 
    "TimeStamp": 20160224115641 
    }, 
    { 
    "Code": "abcdef", 
    "TimeStamp": 20160224101641 
    }, 
    { 
    "Code": "abcdef", 
    "TimeStamp": 20160224105641 
    } 
] 

對於這個結果,我以這種方式申請另一個訂單:

feedResp.OrderByDescending(a => a.TimeStamp).AsEnumerable(); 

的響應是:

[ 
    { 
    "Code": "123456", 
    "TimeStamp": 20160224115641 
    }, 
    { 
    "Code": "123456", 
    "TimeStamp": 20160224115507 
    }, 
    { 
    "Code": "abcdef", 
    "TimeStamp": 20160224105641 
    }, 
    { 
    "Code": "abcdef", 
    "TimeStamp": 20160224101641 
    } 
] 

現在,如果我使與指定所述檢索到的項目的限制LINQ操作者採取()初始查詢,我失去了在結果的一些元素。 爲什麼?

+0

您的原始回覆有4個結果。您爲Take指定了什麼值?如果它小於4,你顯然會得到更少的結果。 –

回答

1

使用此查詢,您可以使用相同的文檔實現JOIN,這意味着如果您有4個文檔,每個文檔有4個日誌,則有16個文檔。

Linq動態創建查詢,可能發生的事情是Take執行文件而不是查詢結果。

我想嘗試的是在文檔查詢上使用FeedOptions並指定我想要在那裏獲得的最大結果數。

var Query = client.CreateDocumentQuery("my_collection_uri",new FeedOptions(){MaxItemCount=4}).OrderByDescending(c => c.LastScanTimeStamp).SelectMany(a => a.ScanLog.Select(b => new { Code = a.Code, TimeStamp = b.TimeStamp })).AsDocumentQuery(); 
var feedResp = await Query.ExecuteNextAsync(); 
+0

我已經嘗試了FeedOptions參數,但結果是一樣的。如果我有16個文檔的連接結果,如您所說,應用Take操作符或FeedOptions參數,獲取最多10個結果,並按順序,我採用第一個和第二個文檔,然後跳過一些下一個文檔,然後檢索其他下一個文件。 – Matteo

+0

我以爲這就是你想達到的。我現在明白,你想要的是在發生連接之前應用Take on the Documents **,所以10的結果可能會有40個結果(如果每個文檔有4個日誌),那是正確的嗎? –

+0

我已經解決了這個問題。真的這不是一個真正的問題,因爲根據文檔的結構,從DocumentDB設置的結果是正確的。我花了很多時間分析結果,然後我看到這是一個正確的結果。 – Matteo

0

您可能已將訂單放在您的訂單之前。在這種情況下,take會從無序結果中獲取一些元素,而不是進行排序。如果您在訂單後執行此操作,您將從訂購的元素中獲取集合。這可能是你期望的結果。

+0

我在第一個查詢的.AsDocumentQuery調用之前立即執行Take。 – Matteo