3

ReturnValue パラメータの SqlParameterCollection を調べ、存在する場合はその値に制約違反がないかチェックするメソッドがあります。

      public static void VerifyUniqueness(this ISqlServerProvider provider, 
OperationType operationType, SqlParameterCollection cp)

このメソッド内で、最初に確認するだけで十分だと思いました。

if (cp["@ReturnValue"]==null){return;}

ただし、「@ReturnValue」== nullの場合は例外がスローされるため、Linqを使用すると思いました:

cp.FirstOrDefault(p => p.ParameterName == "@ReturnValue");

しかし、それはコンパイルさえしません。

'System.Data.SqlClient.SqlParameterCollection' には 'FirstOrDefault' の定義が含まれておらず、タイプ 'System.Data.SqlClient.SqlParameterCollection' の最初の引数を受け入れる拡張メソッド 'FirstOrDefault' が見つかりませんでした (using ディレクティブがありませんか?またはアセンブリ参照?)

System.Linq が参照されているため、何が起こっているのかわかりません。

4

1 に答える 1

9

使用できない理由は、(LINQ 式が定義されている) を実装しFirstOrDefaultていないためです。SqlParameterCollectionIEnumerable<SqlParameter>

パラメータをチェックする意図された方法は、使用することですContains

if (cp.Contains("@ReturnValue"))

本当に LINQ 演算子を使用したい場合は、次を使用できますCast

cp.Cast<SqlParameter>()
  .FirstOrDefault(p => p.ParameterName == "@ReturnValue")
于 2013-06-26T03:28:43.180 に答える