gpt4 book ai didi

C# Linq to Entities : The type of one of the expressions in the join clause is incorrect. 类型推断失败

转载 作者:太空狗 更新时间:2023-10-30 00:55:06 27 4
gpt4 key购买 nike

我正在尝试使用 C# linq to entities 将两个表连接在一起。

一张表有客户,另一张表有许可证。这些表由 Client_ID 和 ClientLicence_ClientID 连接。出于某种原因(它们不是我的表),Client_ID 是一个整数,而 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);

当我尝试编译它时出现错误:连接子句中的一个表达式的类型不正确。调用“GroupJoin”时类型推断失败。

如果我注释掉 where 语句,它就会起作用(尽管没有过滤结果)。

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

最佳答案

查看您的加入:

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 子句的情况下它可以工作 - 但是这将是非常令人惊讶的,因为它是一个问题的连接。

关于C# Linq to Entities : The type of one of the expressions in the join clause is incorrect. 类型推断失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10666688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com