【问题标题】:LINQ function anonymous type not exist in current context当前上下文中不存在 LINQ 函数匿名类型
【发布时间】:2015-12-04 16:02:08
【问题描述】:

我最近继承了我公司有时有错误的网站,但没有继承它们的代码,所以我使用 ilspy 反编译二进制文件。我得到的错误如下:

decimal? locA = (from x in data where x.location == (int?)0 && 
x.invoice.Year  == (int?)year && x.invoice.Month == (int?)month
select x).Sum((<>f__AnonymousType1<Invoice, int?> x) => x.invoice.Month_Value);

问题出在&lt;&gt;f__AnonymousType1&lt;Invoice, int?&gt; 行。错误消息(设计时)是f__AnonymousType1 类型在当前上下文中不存在。 (代码已反编译为其中的 15 个)A 找不到声明 f__AnonymousType1 的任何地方。

感谢您对此的任何帮助...

加雷斯

【问题讨论】:

  • 这些是匿名类型。想做什么?
  • 网站没有文档,所有开发人员都在一段时间前离开了,所以我试图解释这些网站。该 sn-p 来自一个名为“GuageDataForMonth”的函数。按月份和地区细分的发票表。它正在尝试按月汇总发票。由于没有原始代码,我想知道那些匿名类型是反编译器“猜测”的结果。返回的结果类是单记录聚合表数据
  • 你的反编译器看起来很糟糕,通常这样的模式反编译得更好。我使用 Reflector,我认为它可以处理所有 C# 模式。你唯一的目标是理解?
  • 没有。它正在生产中,但其他领域需要更改,例如发票、销售数据等的硬编码电子邮件地址。
  • Reflector 可以将整个程序集反编译为 C# 项目。我会先试试。

标签: linq lambda anonymous


【解决方案1】:

这看起来像是一个 lambda 表达式(匿名函数?),其类型为 Invoice,并期望返回类型为 int?。它在那里宣布。只需将其删除。编译器通常会自动为您生成。

.Sum((&lt;&gt;f__AnonymousType1&lt;Invoice, int?&gt; x) =&gt; x.invoice.Month_Value) 变为 .Sum((x)=&gt;x.invoice.Month_Value).Sum(x=&gt;x.invoice.Month_Value)

【讨论】:

  • 抱歉,回复延迟...几天后被叫到另一个办公室。谢谢你的回复。我将 Reflector 9 关闭(我之前已经尝试过 8 个)并进行了更改,但不幸的是,由于另一个区域无法反编译,因此无法尝试更改。
猜你喜欢
  • 1970-01-01
  • 2021-01-02
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多