从db返回数组?

时间:2015-09-10 20:27:44

标签: c# sql-server dapper

我有一个带有左连接的存储过程,返回类似这样的内容:

name1  car1
name1  car2
name1  car3
name2  car1
name3  null
name4  null

我需要将此结果存储在这样的对象中:

class Person 
{
    string Name;
    List<string> Cars;
}

最好的方法是什么?直接在存储过程中或在检索查询结果后的代码中。

我现在做的就是从db获取结果,迭代它并将名称及其汽车列表c#添加到另一个对象(如果名称尚不存在)。

有更好的解决方案吗?

2 个答案:

答案 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方法,这也可以满足你的要求。

你有选择,这是肯定的。