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

C# LINQ:从LINQ到sql查询的转换错误,c#,linq,C#,Linq,我在将linq查询转换为sql查询时遇到了一些问题。问题的根源是当我使用IBPUNO字段时(edmx文件中的字符串类型是什么,sql server中的nchar是什么) 从linq查询到sql servr的“where”子句转换如下: ...WHERE ([Extent1].[IBSUNO] = (LTRIM(RTRIM(@p__linq__0)))) AND ([Extent1].[IBPUNO] IN (N''177828'',N''7115912'))',N'@p__linq__0 nva

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

从linq查询到sql servr的“where”子句转换如下:

...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(1778287115912))

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


如果可能的话,您首先应该让
IBPUNO
成为int。

是的,我遵循您的答案,问题是我不能更改数据库中的任何列(我的查询是从外部系统检索信息)。顺便说一句:我发现了问题所在:MPLINE表的开头和结尾都有空字符串的值:(…我的修复方法类似于:ContextM3.MPLINE中的c,其中c.IBSUNO.Trim()==supplier.M3Code.Trim()&&orderNumber.Contains(c.IBPUNO.Trim())@罗兰多:我很高兴看到你的答案成功了!如果你觉得这是最好的答案,那么请随意添加并接受。不过我的答案也是正确的,对吗?
[Extent1].[IBPUNO] IN (N''177828'',N''7115912'))
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...