是否可以将动态对象与动态LINQ一起使用?

时间:2012-01-24 22:24:07

标签: linq dynamic properties

是否可以使用动态LINQ的动态对象列表?

如果我创建一个具有动态属性的动态对象,然后想在这些对象列表上使用Dynamic LINQ?

例如,我有(数据是动态对象列表):

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

有效。

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

哪个不起作用。


如果我尝试使用Select获取值,我会在“对象”类型中找到“No property or field'xxx”。

这应该可行,对吗?

以前有人做过这些事吗?

提前致谢!

更新<!/强>

耶!

我终于在24小时后(是的,这是真的)找到了解决这个问题的方法,不断进行严格的调查和严重的幻觉!

我实际上可以听到这些代码行在我头脑中嘎嘎作响,我目睹了文明的宇宙灭绝,试图解决这个问题。我看到时空本身在围绕这个无法解决的领域的永恒死亡之前颤抖。

BUT!然后我睡了4个小时,早上得到了解决方案。

解决此问题的关键是创建一个使用索引器的对象,使动态LINQ库在运行时使用“it”-keyword。

所以,它实际上是可能的,虽然每篇文章,博客,论坛,[在这里插入源代码]等我都读到了它的建议但不是。

我甚至可能会得到一些信用(或者像无穷无尽的美元或其他东西)。 (是的,是的,我对这一切都过于兴奋,等等,等等,等等。但这真是真的!):P

如需代码示例,请发邮件至:johan@codelink.se

1 个答案:

答案 0 :(得分:1)

使用opensource Impromtu-Interface(在nuget中找到)

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

这很丑陋,但它允许"branch_group"来自一个变量,我认为这是你正在寻找的有效声明的好处。

Impromptu有wrappers for all types of dlr calls,因为它是开源的,可以深入研究代码并将相同的技术调整为动态linq类型语法,但可能需要做很多工作。