Linq к объектам - Включайте () метод, не загружающийся

Также, если вам нужно проверить некоторую подстроку, вы можете использовать метод contains:

Menu.answer1 = "London";
Menu.answer1.contains("ondo"); // true
46
задан Davy Landman 27 April 2009 в 19:18
поделиться

4 ответа

ОБНОВЛЕНИЕ: На самом деле я недавно добавил еще один совет, который покрывает это и предоставляет альтернативное, возможно, лучшее решение. Идея состоит в том, чтобы отложить использование Include () до конца запроса, см. Это для получения дополнительной информации: Совет 22 - Как сделать включение действительно включенным


В Entity Framework есть известные ограничения при использовании Include (). Некоторые операции просто не поддерживаются с помощью Include.

Похоже, что вы, возможно, столкнулись с одним из этих ограничений, чтобы обойти это, вы должны попробовать что-то вроде этого:

var results = 
   from e in dc.Entities //Notice no include
   join i in dc.Items on e.ID equals i.Member.ID
   where (i.Collection.ID == collectionID) 
   select new {Entity = e, Properties = e.Properties};

Это вернет Свойства, и если связь между Сущность и Свойства - это один ко многим (но не много ко многим), вы обнаружите, что каждый результирующий анонимный тип имеет одинаковые значения в:

anonType.Entity.Properties
anonType.Properties

Это побочный эффект функции в Entity Framework, называемой фиксацией отношений.

См. Этот совет 1 в моей серии EF Tips для получения дополнительной информации.

54
ответ дан 26 November 2019 в 20:29
поделиться

Так, как называется свойство навигации в «Entity», которое относится к «Item.Member» (т. Е. Является другим концом навигации). Вы должны использовать это вместо соединения. Например, если «сущность» добавила свойство с именем Member с количеством элементов 1, а у Member было свойство с именем Items, имеющее множество элементов, вы могли бы сделать это:

from e in dc.Entities.Include("Properties")
where e.Member.Items.Any(i => i.Collection.ID == collectionID) 
select e

Я предполагаю, что свойства вашей модели здесь, но это должно дать вам общее представление. В большинстве случаев использование объединения в LINQ to Entities является неправильным , поскольку предполагает, что либо ваши навигационные свойства настроены неправильно, либо вы их не используете.

4
ответ дан 26 November 2019 в 20:29
поделиться

Попробуйте более подробный способ сделать более или менее то же самое получить те же результаты, но с большим количеством вызовов данных:

var mydata = from e in dc.Entities
             join i in dc.Items 
                 on e.ID equals i.Member.ID 
             where (i.Collection.ID == collectionID) 
             select e;

foreach (Entity ent in mydata) {
    if(!ent.Properties.IsLoaded) { ent.Properties.Load(); }
}

Вы все еще получаете то же самое (неожиданно ) результат?

РЕДАКТИРОВАТЬ : Изменено первое предложение, так как оно было неверным. Спасибо за комментарий-указатель!

-1
ответ дан 26 November 2019 в 20:29
поделиться

Попробуйте следующее:

var query = (ObjectQuery<Entities>)(from e in dc.Entities
            join i in dc.Items on e.ID equals i.Member.ID
            where (i.Collection.ID == collectionID) 
            select e)

return query.Include("Properties") 
20
ответ дан 26 November 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: