2009-04-28 34 views
0

我有麻煩下面的SQL語句轉換爲LINQ到實體:如何一起使用泛型集合與LINQ到實體

SELECT l.* 
FROM locations l 
WHERE l.id NOT IN (/* array of ids */) 

在LINQ,我想看到的東西像(其中MyCollection的是項目的一個泛型列表另計):

IQueryable<Location> locationQuery = from l in DataContext.Location 
            where !myCollection.Contains(l) 
            select l; 

但是,這不會起作用,因爲包含不可用在LINQ到實體(在我看來)。在我最好的/最接近LINQ的嘗試,我有我的位置的集合(列表),我有一個DataContext來檢索數據庫中的所有現有的位置:

List<Location> Route = new List<Location>(); 

// Some code to add Location entities from the DB to the Route collection 

var innerQuery = from p in Route 
       select p.ID; 

IQueryable<Location> locationQuery = from l in DataContext.Location 
            where !((innerQuery).Any(k => k == l.ID)) 
            select l; 

很顯然,我希望得到所有從該位置DB不在我的本地收藏中。但是,代碼會引發NotSupportedException:

無法創建類型爲'閉包類型'的常量值。在此上下文中僅支持基本類型(如Int32,String和Guid)。

我已經擺弄它,使用不同的方法,但我不能得到它的工作。現在我已經讀過,LINQ-to-entities不能進行高級比較(對象級別),這可能會解釋上述錯誤。

我的實際問題是,我如何在LINQ中做什麼,我可以輕鬆地在SQL中做什麼?我只想從DB中選擇一堆實體,但不包括本地(非DB)集合中存在的實體。

+0

歡迎LINQ到實體,更換爲LINQ到SQL不是一半,功能性... – 2009-04-28 22:42:01

+0

我在這裏提出了一個類似的轉換問題; http://stackoverflow.com/questions/4093592/how-to-lookup-entities-in-entityframework-4-by-a-finder-interface-works-in-linq我還沒有解決任何運氣。看起來你在LinqToSql中可以做很多事情,而你在EF中不能這樣做。這非常令人討厭/令人失望。你的問題有點不同,但最終的結果是相似的。我希望你比我有更多的成功。 – 2010-11-29 03:37:37

回答