Linq содержит и отличается - PullRequest
3 голосов
/ 09 августа 2011

У меня есть следующие 3 таблицы с их полями

Книги (Id_Book | Title | Year) 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")};

Я пытаюсь получить все Книги , содержащие любой из Theme_Ids из themesArray

Это то, что у меня до сих пор не работает.Не уверен, как использовать 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 голосов
/ 09 августа 2011

Попробуйте привести Guid[] к List<Guid>, и тогда вы сможете использовать Contains на нем.

where themesArray.ToList().Contains(bookWThemes.Id_Theme)
0 голосов
/ 09 августа 2011

Странно, что ваш запрос 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 голосов
/ 09 августа 2011

Для «внятного» вопроса звоните сюда:

           select book)
           .Distinct()  // <--
           .Skip((index - 1) * page)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...