Nig*_*lis 4 c# linq inference join where
我正在尝试使用C#linq连接两个表到实体.
一个表有客户端,另一个表有许可证.这些表由Client_ID和ClientLicence_ClientID连接.由于某种原因(它们不是我的表),Client_ID是一个int,而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.
看看你的加入:
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)
关键类型是:
clientIdClientLicence_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它可以使用的条款 - 但这将是非常令人惊讶的,因为它是一个问题的连接.
| 归档时间: |
|
| 查看次数: |
2861 次 |
| 最近记录: |