1

linq クエリから sql クエリへの変換で問題が発生しています。問題の原因は、IBPUNOフィールドを使用しているときに、edmxファイルの文字列型とSQLサーバーのnchar型です)

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

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'))

TO [Extent1].[IBPUNO] IN (177828,7115912))

4

1 に答える 1

2

文字列の代わりに整数を格納し、次を使用して intorderNumbersに変換できます。c.IBPUNOConvert.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 に答える