Я прочитал ВСЕ о:
и искал немного больше, но все еще не нашел решения. Я видел, что это происходит на EF 3.5, а в 4.0 должен поддерживаться метод Contains
, но я нахожусь в EF 4, но я получаю эту ошибку. У меня есть фотогалерея, где в альбомах может быть любое количество разных фотографий, и каждая фотография может принадлежать к любому количеству альбомов. Так что это отношения многие ко многим.
У меня есть свойство VisibleObjects
, которое используется около 100 другими методами, которые работают хорошо, но я все равно вставляю его: (Я точно уверен, что проблема не , вызванная что-то здесь)
static IQueryable<GlobalObject> VisibleObjects
{
get
{
return from obj in db.GlobalObjectSet where obj.IsVisible && !obj.SiteUser.IsDeactivated orderby obj.ID descending select obj;
}
}
Я пробовал несколько разных запросов:
У меня есть VisiblePhotos
свойство:
Это не сработало:
static IQueryable<Photo> VisiblePhotos(this Album a)
{
return from p in VisibleObjects.OfType<Photo>() where a.Photos.Contains(p) select p;
}
Изменено на это:
static IQueryable<Photo> VisiblePhotos(this Album a)
{
return from p in VisibleObjects.OfType<Photo>() where a.Photos.Any(other => p.ID == other.ID) select p;
}
Все еще не работал.
Вот метод вызова:
public static List<Photo> GetLatestPhotosByAlbum(Album alb, int count = 3)
{
lock (sync)
{
return alb.VisiblePhotos().OrderByDescending(p => p.ID).Take(count).ToList();
}
}
Не работал, изменился на:
public static List<Photo> GetLatestPhotosByAlbum(Album alb, int count = 3)
{
lock (sync)
{
return (from p in VisibleObjects.OfType<Photo>()
where alb.Photos.Any(ph => ph.ID == ph.ID)
select p).ToList();
}
}
Все еще не работает. Жалуется на невозможность создать константу моего типа объекта Photo, который является объектом Entity со свойством ID, если это помогает. Я не уверен в истинной причине ошибки, и у меня нет других идей о запросах. Я думаю, что название метода самоочевидно: я пытаюсь получить фотографии в данном альбоме. Загрузка записей альбома в память не является решением, запрос должен выполняться по базе данных, а не по памяти. Мне нужно объяснение этого исключения, , почему это происходит здесь, и как я могу заставить мой запрос работать.