【问题标题】:How do you resolve ambiguity between types in Linq?如何解决 Linq 中类型之间的歧义?
【发布时间】:2011-02-02 18:13:23
【问题描述】:

我有两个实体集,它们具有同名的实体和同名的属性。因此:

 FormsEntities formEntities2011 = new FormsEntities2011();
 FormsEntities formEntities2010 = new FormsEntities2010();

我对每个都有疑问:

 // -- Get a list of Clients from the 2010 Database for this agent
 var clients2010Query = from c in formsEntities2010.Clients
                        join ac in formsEntities2010.Agent_Client on c.Client_ID equals ac.Client_ID
                        where ac.Agent_ID == a.Agent_ID
                        orderby c.Client_ID
                        select c;

但我在关于Clients 之间歧义的连接语句中收到错误消息。我相信这是因为formEntities2011formEntities2010 都有一个Client 实体。

通常我只会添加命名空间来解决歧义,但我不知道如何在 Linq 语句中做到这一点?

c.Client_ID 和 ac.Client_ID 上的错误是“成员被多次定义”

【问题讨论】:

  • tvanfosson 你是如何格式化我的代码的?通常 StackOverflow 会为我做这件事,但这次没有。
  • 确切的错误是什么?如果只选择客户端的一个属性(比如 Client_ID),错误会改变吗?
  • @Inturbidus - 你的缩进不够远。它需要四个空格。
  • 对不起! c.Client_ID 和 ac.Client_ID 上的错误是“成员被多次定义”
  • 如果我将选择语句更改为选择 c.Client_ID 它不会更改错误。

标签: c# linq linq-to-entities


【解决方案1】:

如果您想显式分配类型,请尝试使用扩展方法和Cast

var c2010 = formsEntities2010.Clients
                .Join( formsEntities1010.Agent_Client
                                        .Where( ac => ac.Agent_ID == a.Agent_ID ),
                       c => c.Client_ID,
                       ac => ac.Client_ID,
                       (c,ac) => c )
                .Cast<Forms2010.Client>(); // or whatever namespace you choose

不过,如果这影响了您的问题,我会感到惊讶,因为在我看来,它很难确定将哪些字段用作连接键。

【讨论】:

  • 我想没有办法拥有相同名称和属性的表。
【解决方案2】:

将实体上的命名空间更改为不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多