0
說例如我有一個List<Person>
其中每個人有十幾個屬性。列表生成時,前十個屬性全部設置。我可以使用Linq從列表<object>設置屬性從數據讀取器
後來我需要填充列表中每個項目上最後兩個屬性的數據。
我有一個存儲過程,返回PersonId,Property11,Property12,我想使用Linq從IDataReader
中取值,並從列表中填充正確的Person
上的值,明顯匹配PersonId。
我開始喜歡的東西:(這不是我用實際的代碼,但是結構是相似的。)
public void GetAdditionalProps(List<IPersonData> people)
{
var peopleIds = String.Join(",", people.Select(x => x.ID));
using (var conn = Database.GetConnection(Database.PeopleDB))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "spGetPeopleData" ;
cmd.CommandType = CommandType.StoredProcedure;
cmd.AddParameterWithValue("@Ids" , peopleIds);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var pd = people.First(p => p.ID.Equals(reader["PersonId" ]));
pd.HairColor = reader["HairColor" ].ToString();
pd.EyeColor = reader["EyeColor" ].ToString();
}
}
}
}
}
但我不知道我是否可以使用LINQ來填充數據爲每個列表項目,而不必單獨找到每個列表項目?
這已經是最可讀和最有效的方式了。你爲什麼要用'SqlDataReader'來使用LINQ?爲什麼你把這個清單通過這個方法呢?通常你會從數據創建一個,然後從方法中返回。 –
[這裏](http://stackoverflow.com/a/12500843/284240)是一個例子,你可以如何在LINQ中使用'SqlDataReader',只需將其轉換爲'IDataRecord'。但LINQ並不是正確的工具,無論如何都不會更新某些東西。 –
我想我真正想知道的是,如果有更有效的方法來處理我在這裏要做的事情。我當然想不起一個。 – Travis