匿名类型名称冲突

时间:2014-05-14 13:42:21

标签: c# linq anonymous-types

返回匿名类型的linq查询在执行时会引发以下错误。

The type '<>f__AnonymousType9<Name,Value>' exists in both    
'Customer.CustomerWeb.Presentation.dll' and 'Customer.CustomerContext.dll'

使用JetBrains dotPeek我能够发现有两个编译器生成的类发生冲突。

Customer.CustomerContext.dll

 internal sealed class <>f__AnonymousType9<<PayrollSiteID>j__TPar, <IsActive>j__TPar>

Customer.CustomerWeb.Presentation.dll

 internal sealed class <>f__AnonymousType9<<Name>j__TPar, <Value>j__TPar>

两个生成的类都在根namespace中。有什么方法可以将Anonymous Type classes指向每个程序集上的特定命名空间吗?简单的解决方法是向其中一个匿名查询添加第三个变量,但这更像是一个黑客攻击。

2 个答案:

答案 0 :(得分:1)

我认为您需要类似下面的内容,在命名空间中添加using语句,以便在名称解析中为其提供首选项:

using Customer.CustomerContext;
namespace yourNameSpace
{
    using Customer.CustomerWeb.Presentation; //Where f__AnonymousType9<Name,Value> exists
}

答案 1 :(得分:0)

来自评论

  

它会产生StackOverFlow。为了获得The type '<>f__AnonymousType9<Name,Value>' exists in both
'Customer.CustomerWeb.Presentation.dll' and 'Customer.CustomerContext.dll'
,我必须先删除一个断点   崩溃。检查变量是我收到该消息的时间

命名空间冲突不是你的问题,它导致调试器在尝试评估变量时爆炸,但我不知道它是如何导致StackOverflow的。您需要a)仔细查看linq以找出意外递归的位置,或者b)发布堆栈跟踪的一部分,以便我们可以帮助您跟踪它。