У меня небольшая проблема с кодом ниже:
var composer =
(from comp in db.Composers
where comp.Composer_Name.Contains(composerTextbox.Text)
select comp.Composer_ID);
var song =
(from sng in db.Songs
where sng.Composer_ID.Equals(composer)
select sng.Track_ID);
var track =
(from trk in db.Tracks
where trk.Track_ID.Equals(song)
select trk.CD_ID);
e.Result =
from result in db.CDs
where result.CD_ID.Equals(track)
select new { result.CD_Title };
Ошибка, которая появляется при попытке запустить код, выглядит следующим образом:
Comparison operators not supported for type 'System.Linq.IQueryable`1[System.Int16]'.
Вот как устроена база данных:
- CD
- Треки
- Песни
- Композиторы
- Composer_ID
- Composer_Name
Моя основная цель в коде - позволить пользователю искать в базе данных компакт-диски, которые были составлены человеком по их выбору.Обратите внимание, что на некоторых компакт-дисках может быть несколько композиторов, так как песни / дорожки допускают более одной записи в разделе Composer.
То, что должно быть возвращено пользователю, - это список компакт-дисков в GridView.
Буду признателен за любую помощь!
Редактировать:
Как сказал мистер Кирк Волл, я на самом деле пытаюсь вернуть списоккомпакт-дисков против, возможно, многих композиторов.
Я продолжил и обновил код, как он предложил:
var composers =
(from comp in db.Composers
where comp.Composer_Name.Contains(composerTextbox.Text)
select comp.Composer_ID).ToArray();
var song =
(from sng in db.Songs
where composers.Contains(sng.Composer_ID)
select sng.Track_ID);
Я попробовал следующее, чтобы посмотреть, выведет ли он правильный список компакт-дисков:
var composer =
(from comp in db.Composers
where comp.Composer_Name.Contains(composerTextbox.Text)
select comp.Composer_ID).ToArray();
Предполагается, что он собирает все действительные идентификаторы Composer и помещает их в массив.
var song =
(from sng in db.Songs
where composer.Contains(sng.Composer_ID)
select sng.Track_ID).ToArray();
Предполагается, что он просматривает список допустимых идентификаторов Composer и создает новый массив действительныхпесни.
var track =
(from trk in db.Tracks
where song.Contains(trk.Track_ID)
select trk.CD_ID).ToArray();
Предполагается, что вы просматриваете список действительных песен и создаете новый массив допустимых треков.
e.Result =
from result in db.CDs
where track.Contains(result.CD_ID)
select new { result.CD_Title };
Это должно просматривать список действительныхотслеживает и извлекает все связанные с ними заголовки компакт-дисков.
Я попытался запустить код, исключений не было, но единственным результатом, который был возвращен при поиске, был самый первый компакт-диск в базе данных.Любые попытки поиска нового композитора возвращали только тот же компакт-диск.