Этот синтаксис неверен. Linq:
where s.SongID in (songIds)
Линк-эквивалент SQL WHERE IN
должен использовать Contains()
. Вы должны перевернуть утверждение и начать со списка:
where songIds.Contains(s.SongID)
При использовании Linq-to-SQL вы всегда должны использовать свойства навигации вместо явных объединений. Если у вас есть правильные внешние ключи между вашими таблицами, эти свойства будут созданы автоматически. Со свойствами навигации и songIDs
, измененным на int[]
, ваш запрос должен выглядеть примерно так:
int[] songIDs = ((ArrayList)Session["SelectedSongs"]).OfType<int>().ToArray();
var query = from s in sa.Songs
where songIDs.Contains(s.SongID)
select new
{
s.SongID,
s.SongName,
s.Artist.ArtistName,
s.Genre.GenreName
};