Использование отражения для получения полей выбора в запросе linq - PullRequest
3 голосов
/ 26 января 2011

Я использую Linq для своих запросов и хотел бы иметь возможность получить список свойств, которые я хочу вернуть в части «select», используя отражение.Я пробовал следующее безрезультатно:

string[] paramList = new[]{"AppId","Name"};
var query =
                from entity in
                    _ctx.App
                select new {entity.GetType().GetProperties().Where(prop=>paramList.Contains(prop.Name) )};

Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 26 января 2011

При работе с отражением внутри запроса EF вам необходимо написать выражение самостоятельно.Посмотрите на этот существующий вопрос для получения дополнительной информации

Проблема не в самом Linq, а в том, что ваш запрос анализируется в дереве выражений, которое Entity Framework не понимает.

1 голос
/ 26 января 2011

Я не верю, что вы можете достичь того, что вы хотите, так, как вы делаете это.Чтобы создать анонимный тип, форма (то есть свойства) типа должна быть известна во время компиляции.Лучше всего сделать то, что вы хотите, - создать выражение select вручную (используя API-выражения для выражения, найденные в System.Linq.Expressions), а затем передать встроенное вами выражение в метод расширения Select() (а неиспользуя синтаксис декларативного запроса, как вы в своем примере).

В конечном счете, если вы работаете, скорее всего, вам придется использовать отражение, чтобы получить доступ к чему-либо из элементов коллекции, которую выполучают, поскольку вы не будете знать, что он будет удерживать до времени выполнения.

Есть ли причина, по которой вы не хотите возвращать весь объект?

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