2011-11-10 94 views
3

本地序列比較我有一個本地List<DateInterval>其中DateInterval是:與LINQ to SQL中

internal class DateInterval{ 
     public DateTime StartDate { get; set; } 
     public DateTime EndDate { get; set; } 
} 

我想匹配的DateInterval的至少一個數據庫中的所有事件。

理想的情況下,我會做這樣的事情:

var query = from _event in db.GetTable<Event>() 
      where dates.Any(d => d.StartDate <= _event.Date && d.EndDate > _event.Date) 
      select _event; 

,但我得到以下異常:

Local sequence cannot be used in LINQ to SQL implementation of query operators except  the Contains() operator 

由於.Contain()方法只接受精確的結果,而不是時間戳,是有辦法取得理想的結果?

回答

0

此處的基本選項是實現數據庫中的查詢,然後對內存中的列表執行比較。

var query = yourSqlQuery.AsEnumerable() // forces* evaluation 
         .Where(...) // happens in memory 

很明顯,你可以在DB以拉少結果存入內存中,更好地履行更多的過濾,但在這種情況下,您的選擇是有限的。

var query = db.GetTable<Event>().AsEnumerable().Where(event => dates.Any(...)); 

*估仍推遲到您使用查詢從附加Where的結果,但濾波會在內存中發生,AsEnumerable()之前的部分將出現在數據庫中。

+0

我試圖從數據庫中減少結果集。我能做的最好的只是獲取List 的最小startDate和max endDate之間的事件,並在內存中進行臨時過濾 – dcarneiro