C#Linq to Entities:join子句中某个表达式的类型不正确。类型推断失败

时间:2012-05-19 15:51:11

标签: c# linq join where inference

我正在尝试使用C#linq连接两个表到实体。

一个表有客户端,另一个表有许可证。这些表由Client_ID和ClientLicence_ClientID连接。由于某种原因(它们不是我的表),Client_ID是一个i​​nt,而ClientLicence_ClientID是一个字符串。

我的代码是:

var licences = (from client in entities.Clients
                            join licence in entities.ClientLicences
                            on new { clientId = SqlFunctions.StringConvert((double)client.Client_ID) } equals
                            new { licence.ClientLicence_ClientID }
                            into clientGroup
                            where (filter.clientId == 0 || client.Client_ID == filter.clientId)
                            select licence);

当我尝试编译它时,我收到一个错误:join子句中某个表达式的类型不正确。调用'GroupJoin'时类型推断失败。

如果我注释掉where语句,那么它可以工作(尽管没有过滤结果)。

filter变量是传递给函数的类。它只有一个属性:int clientId。

1 个答案:

答案 0 :(得分:6)

看看你的加入:

join licence in entities.ClientLicences on
new { clientId = SqlFunctions.StringConvert((double)client.Client_ID) }
equals
new { licence.ClientLicence_ClientID }
into clientGroup

关键类型是:

  • 具有名为clientId
  • 的属性的匿名类型
  • 具有名为ClientLicence_ClientID
  • 的属性的匿名类型

这两个匿名类型无法进行相等性比较。实际上,我怀疑你根本不需要匿名类型。我希望这可行:

join licence in entities.ClientLicences on
SqlFunctions.StringConvert((double)client.Client_ID)
equals
licence.ClientLicence_ClientID
into clientGroup

(显然你不需要所有的新行 - 我只是为了清晰起见而试图将各个部分分开。)

你声称如果没有where条款就行了 - 但这会非常令人惊讶,因为它是连接问题。