无法在SqlParameterCollection上使用FirstOrDefault

ris*_*ism 3 c# linq

有一种方法可以检查ReturnValue参数的SqlParameterCollection,如果存在,则检查该约束违规的值.

      public static void VerifyUniqueness(this ISqlServerProvider provider, 
OperationType operationType, SqlParameterCollection cp)
Run Code Online (Sandbox Code Playgroud)

在这种方法中,我认为首先检查是足够的:

if (cp["@ReturnValue"]==null){return;}
Run Code Online (Sandbox Code Playgroud)

但是如果"@ReturnValue"== null则会引发异常,所以我认为我会使用Linq:

cp.FirstOrDefault(p => p.ParameterName == "@ReturnValue");
Run Code Online (Sandbox Code Playgroud)

但那甚至不会编译.

'System.Data.SqlClient.SqlParameterCollection'不包含'FirstOrDefault'的定义,并且没有可以找到接受类型'System.Data.SqlClient.SqlParameterCollection'的第一个参数的扩展方法'FirstOrDefault'(你是否缺少using指令?或汇编参考?)

System.Linq被引用,因此不确定发生了什么.

Ric*_*lay 9

你不能使用的原因FirstOrDefaultSqlParameterCollection没有实现IEnumerable<SqlParameter>(在其上定义了LINQ表达式).

检查参数的预期方法是使用 Contains

if (cp.Contains("@ReturnValue"))
Run Code Online (Sandbox Code Playgroud)

如果您真的想使用LINQ运算符,可以使用Cast:

cp.Cast<SqlParameter>()
  .FirstOrDefault(p => p.ParameterName == "@ReturnValue")
Run Code Online (Sandbox Code Playgroud)