MethodInfo для EntityCollection вместо Queryable - PullRequest
0 голосов
/ 14 января 2009

Я вручную создаю эквивалент лямбды:

var function = p => p.Child.Any(c => c.Field == "value");

У меня есть ссылка MethodInfo на метод Any, используемый со встроенными в код выражения.

MethodInfo method = typeof(Queryable).GetMethods()
        .Where(m => m.Name == "Any" && m.GetParameters().Length == 2)
        .Single().MakeGenericMethod(typeof(Child));

Мои объекты: Родитель 1 --- * Ребенок

Child - это свойство Navigation для Parent (p в лямбде выше). Тип свойства - EntityCollection, созданный дизайнером.

Я искал правильный способ ссылки на метод Any для создания этого вызова. Марк дал мне ответ, как получить это здесь: Вызов метода из выражения

Но это не работает для структуры сущностей. EntityCollection не реализует IQueryable, поэтому как ссылаться на метод Any.

Ответы [ 2 ]

3 голосов
/ 14 января 2009

EntityCollection<T> не реализует IQueryable<T>, поэтому неудивительно, что это не работает, ИМО.

Не могли бы вы дать больше объяснений тому, что вы пытаетесь сделать? Если вы ожидаете, что запрос будет запущен в базе данных, я предполагаю, что он действительно не будет поддерживать это (учитывая, что EntityCollection<T> не реализует IQueryable<T>). Если вы хотите, чтобы запрос выполнялся локально, вы должны использовать Enumerable.Any вместо Querybly.Any.

РЕДАКТИРОВАТЬ: увидев обновленную коллекцию, я думаю, вы просто хотите Enumerable.Any вместо Queryable.Any. Не забывайте, что если это предоставляется в виде дерева выражений, вы на самом деле не будете выполнять этот код в любом случае. Предположительно, фреймворк понимает Enumerable.Any применительно к EntityCollection<T>

0 голосов
/ 03 августа 2009

Вы можете привести EntityCollection к IQueryable, используя метод расширения AsQueryable ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...