Linq Contains and Distinct



我有以下3个表及其字段

Books(Id_Book | Title | Year)
Book_Themes (Id | Id_Book| Id_Theme)
Themes (Id_Theme| Title)

我也有一个gid数组与Id_Themes

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

我试图从themesArray

中获取所有Books包含任何 theme_id

这是我到目前为止没有工作。不确定在这种情况下如何使用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[]不包含Contains的定义。我也不确定该把Distinct

放在哪里

* * * * 更新 * * * *

注意到我的模型有Id_Theme为空…我更改了数据库,但没有将更改反映在我的模型上。所以要回答这个问题,如果它是空的只是改变包含行themesArray.Contains(bookWThemes.Id_Theme.Value)…有了这个改变,它就可以工作了。

奇怪的是你的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 
    }

对于"distinct"问题,将调用放在这里:

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

尝试将Guid[]转换为List<Guid>,然后您可以在其上使用Contains。

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

最新更新