无法在SqlParameterCollection上使用FirstOrDefault

时间:2013-06-26 03:24:42

标签: c# linq

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

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

1 个答案:

答案 0 :(得分:9)

您无法使用FirstOrDefault的原因是SqlParameterCollection未实现IEnumerable<SqlParameter>(在其上定义了LINQ表达式)。

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

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

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

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