我在将 linq 查询转换为 sql 查询时遇到了一些问题。问题的根源是当我使用 IBPUNO 字段时,edmx 文件中的字符串类型和 sql server 中的 nchar 是什么)
var query = (from c in ContextM3.MPLINE where c.IBSUNO == supplier.M3Code.Trim() && orderNumbers.Contains(c.IBPUNO)
“where”子句从 linq 查询到 sql servr 的转换类似于:
...WHERE ([Extent1].[IBSUNO] = (LTRIM(RTRIM(@p__linq__0)))) AND ([Extent1].[IBPUNO] IN (N''177828'',N''7115912'))',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'8100033 '
如果我在 ssms 中执行这个 sql 查询,我没有行但是如果我将 sql 查询更改为
WHERE ([Extent1].[IBSUNO] = (LTRIM(RTRIM(@p__linq__0)))) AND ([Extent1].[IBPUNO] IN (177828,7115912))',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'8100033 '
然后炒锅很好,它检索我想要的行(我所做的更改是将值 N''177828'' 转换为仅 177828 所以我的问题是我怎么能对 Net 说这个改变?
[Extent1].[IBPUNO] IN (N''177828'',N''7115912'))
到 [Extent1].[IBPUNO] IN (177828,7115912))