質問

メソッドパラメーターを使用

Int16? id

およびLinq to SQLのwhere句

where !id.HasValue || m.Id == id

データコンテキストの条件の結果のコマンドテキストは次のとおりです

ビジュアライザーから:

SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5

マップされたクラスのIDはInt16であり、データベース自体の列タイプはsmallintであるため、SQLの背後でパラメーターがsmallint(Int16)ではなく整数(Int32)と見なされるのはなぜですか?


列のマッピング:

    [Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
    public Int16 Id { get; set; }
役に立ちましたか?

解決

読み取る場所の句を変更する

where !id.HasValue || m.Id == id.Value

nullable shortについて、それを放り出しているものがあります。理由はわかりませんが、以前にこれに遭遇し、 .Value の追加が機能することがわかりました。

他のヒント

うーん... SQLで!id.HasValueの表現を取得していないことに気付きました。おそらく、これはラップされることに関連したある種の策略でしょうか?私には偽物のように思えますが、私が考えることができる唯一のものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top