【问题标题】:Is it possible to use dynamic objects with Dynamic LINQ?是否可以将动态对象与动态 LINQ 一起使用?
【发布时间】:2012-01-24 22:24:06
【问题描述】:

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

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

例如,我有(其中 data 是动态对象的列表):

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

哪个有效。

还有:

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

这不起作用。


如果我尝试使用 Select 获取值,我会得到“类型 'Object' 中不存在属性或字段 'xxx'”。

这个应该可以吧?

以前有人做过这种事吗?

提前致谢!

更新!

耶!

经过 24 小时(是的,确实如此)不断的艰苦调查和严重的幻觉,我终于找到了解决方案!

我实际上可以听到那些代码行在我的脑海中嗡嗡作响,我目睹了文明世界因试图解决这个问题而灭绝。我看到时空本身在围绕着这个无法解决的领域的浩瀚永恒死亡面前颤抖。

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

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

所以,这实际上是可能的,尽管我读过的每篇文章、博客、论坛、[在此处插入源代码] 等都表明它不是。

我什至应该为此获得一些荣誉(或者像无尽的美元或其他东西)。 (是的,是的,我对这一切都过于兴奋了,等等,等等,等等。但这是真的!):P

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

【问题讨论】:

  • 嗯,其实是正确的,因为使用了动态LINQ。但遗憾的是,它似乎只适用于编译时对象,而不适用于动态运行时对象。
  • "对于代码示例,请邮寄至:johan@codelink.se" ...或者您可以将其发布在此处作为本网站预期的答案。
  • 好吧,这很愚蠢,当您寻求解决方案时,您是在寻求代码演示或以某种方式解决您的问题的帮助,一旦您自己得到它,您到底在做什么代码发邮件给我?将解决方案寻求者列入候补名单并给您发电子邮件真的有意义吗?如果你不回复你的电子邮件给像你 24 小时以上不睡觉一样疯狂的人怎么办?甚至连一分钟的睡眠都没有?可笑!
  • 有人应该禁止这个人......显然他没有为社区增加任何价值,但希望从中获得帮助......如果这个人不再在这里,我就不会失眠了!

标签: linq dynamic properties


【解决方案1】:

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

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

这很难看,但它会允许 "branch_group" 来自一个变量,我认为这是您正在寻找的对有效语句的好处。

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

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2010-10-04
    • 2010-10-17
    • 2021-05-26
    • 2016-05-15
    相关资源
    最近更新 更多