首页 > 解决方案 > join 子句中的表达式之一的类型不正确。调用“加入”时类型推断失败

问题描述

我正在使用以下查询来连接两个表。

IQueryable<BoaPieceConsole> pieceConsoleQueryable;
                pieceConsoleQueryable = (from js in rewriteEntity.JobSummaries
                                         where js.ProductCode != null
                                         join bffd in rewriteEntity.BOAFinalFileDatas
                                         on new { js.JobID, prodCode = js.ProductCode } equals new { bffd.ADFJobID, prodCode = bffd.ProductCode }
                                         where js.ProductCode.Equals(ConsoleConstants.DAMAGED_PROD_CODE, StringComparison.OrdinalIgnoreCase)
                                         && js.ProcessDate >= startDate
                                         select new DamageConsoleModel
                                         {
                                             JobID = js.JobID,
                                             Productcode = js.ProductCode
                                         });

我已经找出了问题,但无法找出解决此问题的方法。JobSummaries 表列 ProductCode 是可为空的类型,但 BOAFinalFileDatas ProductCode 是不可为空的。由于该连接引发编译时错误,说明:

join 子句中的表达式之一的类型不正确。对“加入”的调用中的类型推断失败。

ProductCode 列的数据类型是 varchar。

我应该如何解决这个问题?

标签: c#linq

解决方案


我相信您需要更改其中一个复合键的至少一部分的名称,以便它们匹配。

见这里:https ://docs.microsoft.com/en-us/dotnet/csharp/linq/join-by-using-composite-keys

就像是:

on new { JobID = js.JobID, prodCode = js.ProductCode } equals new { JobID = bffd.ADFJobID, prodCode = bffd.ProductCode }

推荐阅读