Рейтинг:
0
Silvabolt
Попробуйте это:
ctx.GetAll().Include(o=>o.NavProp).Where(p=>p.NavProp.Id==someId);
tux@ddictor
спасибо за ответ, но то, что вы предлагаете использовать метод Where methode, чтобы получить фильтр родителей, и это не то, что я хочу.я хочу отфильтровать Чайлдс (навигационные свойства в терминах Entity Framework).Так что я хочу что-то вроде этого:
СТХ.Способность().Включают в себя(о=&ГТ;о'.NavProp.Где(navp=>navp.Id==someId);
:)
Silvabolt
Извини, чувак, я неправильно понял, но я думаю, что мой обновленный ответ должен сработать. Попробовать ее :)
Примечание: то, что вы пытаетесь сделать, не работает, потому что NavProp не является типом IEnumerable, а это означает, что вы не можете присоединить предложение linq Where к самому свойству NavProp. Мой текущий ответ захватит вам родительские объекты, содержащие NavProp, которые имеют свой NavProp.Id равен someId.
tux@ddictor
Привет, чувак, я действительно уважаю твою помощь, но позволь мне еще раз объяснить, что мне нужно.
допустим,у меня есть таблица родителя и другая таблица детей,каждый родитель может иметь несколько детей,но ребенок может иметь одного родителя, так что это отношение один ко многим, и это означает, что в моих обобщенных моделях у родителя есть свойство навигации Childs, которое является коллекцией детей .
когда я использую этот код:
СТХ=способность.Include(o.Childs) все родители загружены и все их childs.so далеко так не хорошо :).почему?
допустим я хочу чтобы все родители были загружены но для каждого родителя я хочу загрузить только его детей у которых например есть имя начинающееся с B так что я могу сделать что то вроде этого:
ListParents= ctx.GetAll().Включите((p=>p.Childs).Где(c=>c.Name-да.StartsWith("B"));
я читал некоторые статьи,в которых говорится,что это невозможно сделать, потому что метод include не принимает фильтрацию внутри него, он принимает только имена свойств для включения не больше и не меньше, а также потому, что Navpop не являются IEnumerables, как вы упомянули.
я рассматривал возможность использования проекции, которая позволяет это, но я всегда должен инкапсулировать возвращаемый результат в определенный тип, потому что результаты возвращаются как анонимный тип, который не может позволить мне заполнить мою ObservableCollection<t>, которому нужен IEnumerable или Список для его заполнения.
проекция работает нормально ,но она добавляет много работы ,и вы теперь, как программисты, ненавидите это, мы ленивы (ну и ленивы).
еще раз спасибо, и я надеюсь, что это хорошо объяснено :)
Silvabolt
Теперь я понимаю, что ты имеешь в виду. Я думаю, что короткий ответ заключается в том, что вы правы, вы не можете этого сделать, потому что Include() нетерпеливо загружает все указанное свойство.
Длинный ответ заключается в том, что вы можете обойти его, выполнив фильтрацию сообщений, то есть выполнив фильтрацию на "ListParents" после того, как вы захватите данные.
У этого парня была та же проблема, что и у вас, обратите внимание, что выбранный ответ даже не использует include:
http://stackoverflow.com/questions/11073727/filter-linq-entity-include-query
Он должен указать вам правильное направление, хотя это будет немного сложнее для вас, потому что ваше свойство NavProp-это сама коллекция.
tux@ddictor
привет Silvabolt.спасибо Вам большое за ваши усилия.да включить() хочет, но infortunatelly больше, тогда как я хочу, чтобы это быть.
первое решение в ссылку, которую вы предложили, это то, что я сделал на самом деле usedbecause вот какие имена проекции.проекция использовать выбранный метод, но к сожалению, он возвращает анонимный тип, так что мы не можем использовать это, чтобы заполнить к ObservableCollection, который я хочу привязать к моей TreeView элемент,но мы должны создать strongely тип, который выглядит не так, как у моих родителей модель и внутри него мы можем использовать, где (), чтобы отфильтровать ребенок navprop(коллекция).
это то, что я использовал, и это работает нормально, но это добавляет больше работы, потому что, когда я хочу иметь дело с базой данных tha, я всегда должен захватить идентификатор в моем новом типе, а затем получить исходную запись, которая имеет тот же идентификатор, а затем манипулировать ею, как я хочу.
я очень ценю ваши усилия,и я действительно благодарю вас за это, это очень мило с вашей стороны.я желаю вам счастливой жизни и счастливого программирования .
желаю удачи