2014-03-19 35 views
2
SqlParameter[] _parameters = {     
    new SqlParameter("@IDNumber", Person.IDNumber), 
    new SqlParameter("@Name", Person.Name), 
    new SqlParameter("@Surname", Person.Surname) 
}; 

如何從對象數組中獲取「名稱」值而不使用索引?我想要做的是,SqlParameter數組到對象

oPerson.Name = _parameters.Find(@Name).Value; 
+0

考慮一個'SqlParameterCollection'? –

回答

3

使用以下:

_parameters.Single(p => p.ParameterName == "@Name").Value; 

這是假定一個給定的ParameterName只存在一個SqlParameter的實例。如果你是如果存在不確定,請執行下列操作:

var param = _parameters.SingleOrDefault(p => p.ParameterName == "@Name"); 
if (param != null) { oPerson.Name = param.Value; } 
+0

它說system.array不包含SingleOrDefault的定義:( –

+1

假設你正在使用.NET 3.5,只需添加'使用System.Linq',否則替換爲'Array.Find(_parameters,p => p.ParameterName ==「@Name」)。值' – decPL

+0

我使用.Net4.0。現在它說,對象不包含ParameterName的定義:( –

2

您可以使用First方法和獲取參數通過它的Name

oPerson.Name = _parameters.First(x => x.ParameterName == "@Name").Value; 
+0

它說system.array不包含第一個定義... –

+1

@BonusKun你應該包括'System.Linq'命名空間:'使用System.Linq;' –

+0

請注意,這可以工作,因爲類型'T [ ]'實現'IEnumerable ',在其上定義Linq擴展方法。 – Codor

3

使用LINQ,很容易

string pName = "@Name"; 
var p = _parameters.FirstOrDefault(x => x.ParameterName == pName); 
if(p != null) 
    oPerson.Name = p.Value.ToString(); 

我以爲你是因爲你是不確定的存在或不存在,需要此代碼你的參數。因此,使用FirstOrDefault允許測試結果,而不直接使用Value屬性,如果您的參數不存在於集合中

+0

它說system.array不包含firstordefault的定義:( –

+0

你認爲我可以從整個數組中提取一個SqlParameter對象?只需提供參數名稱? –

+0

這就是上面的代碼所做的。 var p它是一個SqlParameter。要使用這個例子,你當然需要Linq。你使用的是什麼框架版本? – Steve

2

你可以使用Linq就像

oPerson.Name = _parameters.First(param => param.ParameterName.Equals("@Name")).Value; 

再次搜索的"@Name"值。