3
這是我的情況:在ObjectQuery中使用Contains
我有一個藝術家和事件之間的m:n關係。我試圖做的是獲得一個只包含某個藝術家的事件的IQueryable。我正在使用我的數據訪問層的存儲庫。顯然,下面的方法是行不通的:
_db.EventSet.Include("Location").Where(e => (e.Artists.Contains(artist)) && (e.StartDate > System.DateTime.Now)).OrderBy(e => e.StartDate);
由於我是新的實體框架我真的不明白爲什麼,但我能猜到。所以如果有人能夠以一種非常簡單的方式解釋這一點,我也會很感激。無論如何,我的解決方案,我想出瞭如下所示:
IQueryable<Event> events = _db.EventSet.Include("Location").Where(e => (e.EndDate > System.DateTime.Now));
List<Event> eventsList = new List<Event>();
foreach (var ev in events)
{
eventsList.Add(ev);
}
return (IQueryable<Event>)eventsList.AsQueryable().Where(e => e.Artists.Contains(artist)).OrderBy(e=>e.StartDate);
,這不是一個好的解決辦法可言,因爲所有的事件是檢索和處理這是一個巨大的開銷。有沒有人能告訴我更好的解決方案?我也意識到我並不真正瞭解ObjectQuery是什麼,以及如何將它轉換爲IQueryable(如果甚至可能的話)。
我很感激任何建議。
我沒有測試您的查詢,但我認爲它不工作 – 2010-11-16 18:28:01
@Saeed,爲什麼不你認爲它有效嗎?當然,我不知道OP數據庫的確切架構,但是我設置了事件,藝術家和位置的數據庫,對其進行了測試,並且工作正常。 – 2010-11-16 18:38:37
我認爲''(e.Artists.Any(a => a.ArtistId == artist.ArtistId)''無法處理,因爲您沒有提取的數據來搜索它,只是猜測,它是'EF'如果是AsEnumerable()而沒有像我說的那樣執行不同的執行,但是在這種情況下,我認爲它不能產生sql查詢 – 2010-11-16 18:58:31