Сохраните процедуру выбора всех полей из одной таблицы, используя соединение

Я очень разочарован от linq до sql, когда имею дело со многими ко многим отношениям с расширением пропуска. Это не позволяет мне использовать объединенные запросы. Не уверен, что это так для SQL Server 2005, но в настоящее время я использую SQL Server 2000.

Теперь я хочу написать процедуру хранения для извлечения таблицы, которая соответствует двум таблицам, например, Album_Photo (Album->Album_Photo<-Photo) и Photo, и мне нужны только данные Photos, поэтому я сопоставляю идентификатор альбома с Album_Photo и использую этот идентификатор чтобы соответствовать фото. В процедуре магазина я просто выбираю все объединенные данные. После этого в linq to sql я создаю новый объект Album.

например

var albums = (from r in result
    where (modifier_id == r.ModifierID || user_id == r.UserID)
    select new Album() { 
        Name = r.Name, 
        UserID = r.UserID, 
        ModifierID = r.ModifierID, 
        ID = r.ID, 
        DateCreated = r.DateCreated, 
        Description = r.Description, 
        Filename = r.Filename 
    }).AsQueryable();

Я использовал AsQueryable, чтобы получить результат как IQueryable, а не IEnumerable. Позже я хочу сделать что-то с коллекцией, это дает мне эту ошибку:

System.InvalidOperationException: результаты запроса не могут быть перечислены более одного раза.

1 ответ

Похоже, у вас есть ситуация, когда запрос уже выполнен к тому времени, когда вы захотите отфильтровать его позже в своем коде.

Можете ли вы сделать что-то вроде...

var album = (бла-бла-бла).AsQueryable(). Где (filterClause), когда у вас достаточно информации для обработки

что произойдет, если вы попробуете album.where (фильтр) позже в коде? Это то, что вы пытаетесь?

Другие вопросы по тегам