LINQ:从LINQ到sql查询的转换错误

时间:2012-10-29 00:53:01

标签: c# linq

我遇到了将linq查询转换为sql查询的问题。问题的根源是当我使用IBPUNO字段时,edmx文件中的字符串类型和sql server中的nchar是什么

var query = (from c in ContextM3.MPLINE where c.IBSUNO == supplier.M3Code.Trim() &&       orderNumbers.Contains(c.IBPUNO)

将linq查询中的“where”子句转换为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所以我的问题我怎么能对网做这个改变?

[Extent1].[IBPUNO] IN (N''177828'',N''7115912'))

要     [Extent1]。[IBPUNO] IN(177828,7115912))

1 个答案:

答案 0 :(得分:2)

您可以在orderNumbers中存储整数而不是字符串,并使用c.IBPUNOConvert.ToInt32()转换为int:

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。