Linq содержит и отличается
У меня есть следующие 3 таблицы с их полями
Книги(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")};
Я пытаюсь получить все Книги, содержащие любой из Theme_Ids из themesArray
Это то, что у меня пока что не работает. Не уверен, как использовать Содержит в этом сценарии.
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 ответа
Странно, что ваш запрос 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
}
Для "отдельного" вопроса, позвоните сюда:
select book)
.Distinct() // <--
.Skip((index - 1) * page)
Попробуйте сыграть Guid[]
в List<Guid>
и тогда вы можете использовать Содержит на нем.
where themesArray.ToList().Contains(bookWThemes.Id_Theme)