2014-03-19 30 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"值。