将DataReader数据复制到列表中

时间:2019-06-28 20:04:52

标签: c# list object sqldatareader

我正在尝试使用来自Data Reader的数据加载自定义对象。如何实现

如果最好使用它,我可以将数据读取器更改为DATATable

阅读器数据

ID     Description Type
1      Test1       1
2      Test2       2
3      Test3       1
4      Test4       3  
5      Test5       3

我的最终对象应该看起来像这样

type: 1
    id:1
    desc:Test1  
    id:3
    desc:Test3


type: 2
    id:2
    desc:Test2


type: 3
    id:4
    desc:Test4  
    id:5
    desc:Test5

接口

public class Val
{
    public string type { get; set; }
    public List<valItems> valItems{ get; set; }
}

public class valItems
{

    public string id { get; set; }

    public string desc { get; set; }
}

功能(我被困在这里)需要按类型分组b参见上面的最终结果)

ReadData()
{
//some code

       if (reader.HasRows)
            {

                while(reader.Read())
                {
                    dropdown.Add(new Dropdown
                    {
                        Type = Convert.ToString(reader["type"]),
                        valItems= 
                        }),
                    });
                }
            }



}

2 个答案:

答案 0 :(得分:1)

未经测试,但您可以尝试使用类似的东西进行分组:

List<Val> result = reader.Cast<IDataRecord>().GroupBy(r => r["type"]?.ToString(), 
        r => new valItems { id = r["ID"]?.ToString(), 
                            desc = r["Description"]?.ToString() })
    .Select(g => new Val { type = g.Key, valItems = g.ToList()).ToList();

答案 1 :(得分:0)

您可以创建变量Dictionary<string, Val> types,该变量为每种类型保存其Val对象。然后,在读取数据时,可以将它们添加到其类型的valItems列表中,如下所示。

types[Convert.ToString(reader["type"])].valItems.Add(new ValItems() {id = ..., desc = ...});

当然,您必须处理需要创建字典条目的情况。