1

我在将 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))

4

1 回答 1

2

您可以使用以下方法存储整数而不是字符串orderNumbers并转换c.IBPUNO为 int Convert.ToInt32()

var orderNumbers = new [] { 177828, 7115912 };
var query = (from c in ContextM3.MPLINE 
             where c.IBSUNO == supplier.M3Code.Trim() &&       
                   orderNumbers.Contains(Convert.ToInt32(c.IBPUNO))
             // select etc...

如果可能的话,你首先应该IBPUNO是一个 int 。

于 2012-10-29T01:40:15.510 回答