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

标签 c# linq join where inference

我正在尝试使用 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/

相关文章:

c# - HttpContext.SignOutAsync() 既不注销用户也不删除本地 cookie

Linq 效率问题 - foreach 与聚合

c# - 通过 LINQ 检查分隔字段中的值

c# - 在以方法作为参数的方法中传递字符串

c# - WPF 边框无法很好地包裹图像?

mysql - 当并非所有数据点都匹配时合并 mySQL 中的数据

php - 如何在代码中使用连接?

mysql - 缓慢的 Mysql Inner 加入多个 OR

c# - 如何使用 VersionControlServer.CreateLabel() 更新 TFS 标签名称 [C#][TFS]

c# - 为什么 IEqualityComparer 没有相应的委托(delegate),而 IComparer 有比较