Linq包含和区别

时间:2011-08-09 02:56:00

标签: linq join contains

我有以下3个表及其字段

书籍(Id_Book | Title | Year)
Book_Themes (Id | Id_Book | Id_Theme)
主题(Id_Theme |标题)

我还有一个带有Id_Themes

的Giud数组
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 []不包含Contains的定义。另外我不知道在哪里放置Distinct

* *** 更新 * ***

注意到我的模型让Id_Theme可以为空......我更改了数据库并没有反映我模型的变化。所以要回答这个问题,如果它可以为空,只需将Contains行更改为themesArray.Contains(bookWThemes.Id_Theme.Value)......并且通过此更改可以正常工作。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

对于“不同”的问题,请在此处拨打电话:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您的LINQ查询正在破坏.Contains,这很奇怪。所有三种形式IEnumerable&lt;&gt;和列表&lt;&gt;为我工作。

    [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 
    }