无法对SqlParameterCollection使用FirstOrDefault

本文关键字:使用 FirstOrDefault SqlParameterCollection | 更新日期: 2023-09-27 18:19:59

有一个方法可以检查SqlParameterCollection中的ReturnValue参数,如果存在,则检查该值是否违反了约束。

      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"的定义,没有扩展方法"FirstOrDefault"接受类型为的第一个参数找不到"System.Data.SqlClient.SqlParameterCollection"(您是缺少using指令或程序集引用?)

System.Linq被引用,所以不确定发生了什么。

无法对SqlParameterCollection使用FirstOrDefault

不能使用FirstOrDefault的原因是SqlParameterCollection没有实现IEnumerable<SqlParameter>(定义了LINQ表达式)。

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

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

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

cp.Cast<SqlParameter>()
  .FirstOrDefault(p => p.ParameterName == "@ReturnValue")