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

Nig*_*lis 4 c# linq inference join where

我正在尝试使用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);
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我得到一个错误:join子句中的一个表达式的类型是不正确的.在对"GroupJoin"的调用中类型推断失败.

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

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

Jon*_*eet 6

看看你的加入:

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

关键类型是:

  • 带有属性的匿名类型 clientId
  • 带有属性的匿名类型 ClientLicence_ClientID

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

join licence in entities.ClientLicences on
SqlFunctions.StringConvert((double)client.Client_ID)
equals
licence.ClientLicence_ClientID
into clientGroup
Run Code Online (Sandbox Code Playgroud)

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

你声称没有where它可以使用的条款 - 但这将是非常令人惊讶的,因为它是一个问题的连接.