2014-02-19 54 views
0

我正在寫一個函數來返回一組數據。假設我們有Linq to Entities iQueryable過濾器過濾結果

Dim myQuery = (From B In ctx.MyTable.AsQueryable 
       Select 
        SomeValue = CType(B.SomeValue, Decimal?), 
        AnotherValue = CType(B.AnotherValue, Decimal?)) 

myQuery = myQuery.Where(Function(x) x.SomeValue<50) 
Dim myInterimResult = myQuery.ToList 

如何查詢服務器上過濾MyInternalResult只能通過原始查詢的結果?

我想要的是一個雙重過濾器。因爲在我們說我想先篩選一些值,以便只返回值< 50 ...以及篩選前一個結果的輔助篩選器...

我必須做的.ToList on我的第一個iqueryable過濾器,然後只過濾在.net集合本地結果?我擔心的是,儘管目前我的結果還不能達到10000多條記錄。我想保持我的工作量在SQL服務器上完成,而不是在內存中完成。我擁有的代碼非常大,所以我舉了一個簡單的例子來說明我的觀點。

回答

0

不,您不應該在應用不同的過濾條件之間調用ToList。再打電話Where

Dim myQuery = (From B In ctx.MyTable.AsQueryable 
       Select 
        SomeValue = CType(B.SomeValue, Decimal?), 
        AnotherValue = CType(B.AnotherValue, Decimal?)) 

myQuery = myQuery.Where(Function(x) x.SomeValue < 50) 

myQuery = myQuery.Where(Function(x) x.AnotherValue < 20) 
+0

所以我們說第一次迭代我想表明,人someValue中<50筆交易....,然後將用戶擺在那,他要展示的物品<60二次過濾器.. ..在這種情況下,包括50和60之間的項目?我的意圖是,第二組where子句只來自第一個 – user2892202

+0

的結果好吧,我已經測試並添加多個在同一領域的似乎過濾前一個。謝謝你的幫助! – user2892202

+0

是的,所有條件都被評估。即使您基於同一列進行過濾,其他人也不會覆蓋以前添加的內容。 – MarcinJuraszek