2013-06-26 66 views
3

有一種方法檢查SvalParameterCollection是否爲ReturnValue參數,如果存在,則檢查該值是否違反約束條件。無法在SqlParameterCollection上使用FirstOrDefault

 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」的第一個參數可能被發現(你是 缺少使用指令或程序集引用?)

System.Linq被引用,所以不知道發生了什麼事情。

回答

8

您無法使用FirstOrDefault的原因是SqlParameterCollection未實現IEnumerable<SqlParameter>(其上定義了LINQ表達式)。

檢查參數的預期方法是使用Contains

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

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

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

不,我不想使用Linq 。我實際上鍵入了Contains,但它給了我一個對象引用,所以我想它會通過參數引用進行搜索。現在我在intellisense中獲得了一些額外的覆蓋,包括參數名稱。嘎,糟糕的一天。對於演員來說Thx,在那裏學到了一些東西。 – rism

+0

這種'Cast'方法就像魔術一樣。 –

相關問題