我有一个带有左连接的存储过程,返回类似这样的内容:
name1 car1
name1 car2
name1 car3
name2 car1
name3 null
name4 null
我需要将此结果存储在这样的对象中:
class Person
{
string Name;
List<string> Cars;
}
最好的方法是什么?直接在存储过程中或在检索查询结果后的代码中。
我现在做的就是从db获取结果,迭代它并将名称及其汽车列表c#添加到另一个对象(如果名称尚不存在)。
有更好的解决方案吗?
答案 0 :(得分:0)
假设您有一个DataReader返回连接结果,我会这样做:
Dictionary<string, List<string>> people = new Dictionary<string, List<string>>();
while (reader.Read())
{
string name = reader.GetString(0);
string car = reader.GetString(1);
List<string> cars = null;
if (!people.TryGetValue(name, out cars))
{
people[name] = cars = new List<string>();
}
if (null != car)
cars.Add(car);
}
每个字典键/值对代表一个Person。但是,如果仍然需要,可以从字典条目中创建Person的实例。我只想用字典来访问人和他们的汽车。
答案 1 :(得分:0)
我会编写一个更可重用的DataAccess类,它总是返回IEnumerable<T>
。根据您的要求,您可能/可能不想调用.ToList()
来强制枚举。
然后你可以做任何你想做的事情,比如将IEnumerable<T>
转换成你需要的任何东西,如IDictionary<string, List<string>>
,或者也可以使用.GroupBy()
LINQ方法,这也可以满足你的要求。
你有选择,这是肯定的。