Можно ли использовать динамические объекты с Dynamic LINQ? - PullRequest
0 голосов
/ 25 января 2012

Можно ли использовать список динамических объектов с динамическим LINQ?

Если я создаю динамический объект с динамическими свойствами, а затем хочу использовать Dynamic LINQ в списке таких объектов?

Например, у меня есть (где данные - это список динамических объектов):

IEnumerable<dynamic> result = data.Where(x => x.branch_group != "");

, который работает.

И:

IEnumerable<dynamic> result = data.Where("branch_group != \"\"");

, который НЕработа.


И если я пытаюсь получить значения, используя Select, я получаю "Нет свойства или поля 'xxx' в типе 'Object'".

Это должно быть возможно сделатьНе так ли?

Кто-нибудь уже делал подобные вещи?

Заранее спасибо!

ОБНОВЛЕНИЕ!

Да!

Наконец-то я нашел решение этой проблемы после 24 часов (да, это правда) постоянных жестких исследований и серьезных галлюцинаций!

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

НО!Затем я проспал 4 часа и получил решение утром.

Ключом к решению этой проблемы является создание объекта, использующего индексатор таким образом, чтобы динамическая библиотека LINQ использовала его во время выполнения, используяключевое слово "it".

Итак, это действительно возможно, хотя каждая статья, блог, форум, [вставить источник здесь] и т. д., которые я читал, предполагали, что это не так.

Я могу даже заслужить некоторый кредит (или как бесконечный доллар $ или что-то) для этого.(Да, да, я очень взволнован всем этим и бла, бла, бла. Но это чертовски верно!): P

Для примера кода, пожалуйста, отправьте письмо по адресу: johan @ codelink.се

1 Ответ

1 голос
/ 25 января 2012

с использованием открытого импромту-интерфейса (находится в nuget)

IEnumerable<dynamic> result = data.Where(Impromptu.InvokeGet(x,"branch_group") != "")

Это ужасно, но это позволило бы "branch_group" получить переменную, которая, как я полагаю, является преимуществом, которое вы ищете, по сравнению с утверждением, которое сработало.

Impromptu имеет обертки для всех типов вызовов dlr , так как это открытый исходный код, можно копаться в коде и адаптировать те же приемы к динамическому синтаксису типа linq, но, вероятно, много работы.

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