2011-08-09 50 views
3

我有自己的領域LINQ的包含下不同

書籍以下三個表格(Id_Book |標題|年)
Book_Themes(ID | Id_Book | Id_Theme)
主題(Id_Theme |標題)

我也有一個GIUD陣列Id_Themes

Guid [] themesArray = new Guid []{new Guid("6236c491-b4ae-4a2f-819e-06a38bf2cf41"), new Guid("06586887-7e3f-4f0a-bb17-40c86bfa76ce")}; 

我試圖讓所有書籍含從themesArray

任何Theme_Ids的這是我到目前爲止這是行不通的。不知道如何在這個scnenario中使用Contains。

int index = 1; int size= 10; 
var books = (from book in DB.Books 
       join bookWThemes in DB.Book_Themes 
       on book.Id_Book equals bookWThemes.Id_Book 

       where themesArray.Contains(bookWThemes.Id_Theme)       
       orderby book.Year 
       select book) 
       .Skip((index - 1) * page) 
       .Take(size); 

我得到的themesArray.Contains錯誤(bookWThemes.Id_Theme)的System.Guid []不包含定義包含。另外我不知道放在哪裏鮮明

* ***UPDATE* ***

注意到我的模型具有Id_Theme爲可爲空..我改變了數據庫,並沒有反映出我模型的變化。因此,要回答這個問題,如果它是可以空的,只需將Contains行更改爲themesArray.Contains(bookWThemes.Id_Theme.Value)...並通過此更改即可使用。

感謝您的幫助!

+0

這是編譯時錯誤嗎? – user7116

+0

Linq to Entities或Linq to SQL? – BrokenGlass

+0

是的這是一個編譯時錯誤 –

回答

0

奇怪的是,您的LINQ查詢在.Contains上發生故障。所有三種形式IEnumerable <>和List <>適用於我。

[Test] 
    public void Test43() 
    { 
     var a = new List<Guid>(){new Guid(),new Guid(),new Guid()}; 
     a.Contains(new Guid()); // works okay 
     var b = (IEnumerable<Guid>)a; 
     b.Contains<Guid>(new Guid()); // works okay 
     b.Contains(new Guid()); // works okay 
    } 
+0

謝謝男人......現在工作。其實我注意到了這一點,並更新了我的數據庫和模型......但似乎這一變化並未反映在我的模型上。所以,如果它是可空的,只是使用這個地方themesArray.Contains(bookWThemes.Id_Theme.Value)...我只是修復我的模型 –

0

對於「明顯」的問題,將通話的位置:

  select book) 
      .Distinct() // <-- 
      .Skip((index - 1) * page) 
+0

謝謝cdhowie,問題是更多關於如何使用包含...剛編輯的問題,以反映這 –

+0

我只是想出了包含部分...現在不同。我將Distinct與您建議的一樣,並且我收到了此消息 - 「Skip」方法僅支持LINQ to Entities中的排序輸入。方法'OrderBy'必須在方法'Skip'之前調用。 –

+0

糟糕,我猜你不能在那裏拋出'Distinct()'調用 - 你需要在'orderby'之前插入它。請參閱[本文](http://introducinglinq.com/blogs/marcorusso/archive/2008/07/20/use-of-distinct-and-orderby-in-linq.aspx)。 – cdhowie

0

嘗試鑄造Guid[]List<Guid>,然後你可以使用包含在其上。

where themesArray.ToList().Contains(bookWThemes.Id_Theme) 
+0

有幾個編譯錯誤。 1.'System.Collections.Generic.List .Contains(System.Guid)'的最佳重載方法匹配有一些無效參數。 2.不能從'System.Guid?'轉換'System.Guid' –

+0

好吧,這是我做了什麼來解決它 - 哪裏themesArray.Contains(bookWhemes.Id_Theme.Value) –

+2

@Rodrigo:這意味着你的'Id_Theme'屬性是可以在你的數據模型中爲空。沒有你發佈你的實體看起來像什麼都沒有人知道 – BrokenGlass