有一种方法可以检查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被引用,因此不确定发生了什么.
你不能使用的原因FirstOrDefault是SqlParameterCollection没有实现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)