从SqlDataReader读入字典

时间:2016-06-07 10:47:39

标签: c# dictionary sqldatareader

我在一个类中声明了一个词典:

public class AuthorAttributes
{
   //public int _Paper_ID { get; set; }
   public Dictionary<Int32, Int32> _Paper = new Dictionary<Int32, Int32>();
   public int _CoAuthor_ID { get; set; }
   public int _Venue_ID { get; set; }
}  

而词典会将_Paper_ID_Paper_Category两种类型Int32存储为_Paper

从SQL Server读取数据时:

using (SqlDataReader _myReader_1 = _myCommand_1.ExecuteReader())
{
    while (_myReader_1.Read())
    {
       int _authorID = _myReader_1.GetInt32(0);
       Author _author = _eAthors.FirstOrDefault(_a => _a._Author_ID == _authorID);
       if (_author == null)
       {
          _author = new Author { 
                                 _Author_ID = _authorID, 
                                 _Author_Name = _myReader_1.GetString(1), 
                                 _Year = _myReader_1.GetInt32(6), 
                                 _Attributes = new List<AuthorAttributes>() 
                               };

          _eAthors.Add(_author);
       }

       _author._Attributes.Add(new AuthorAttributes {  
                                                      _Paper = // How to read into Dictionary "_Paper"  
                                                      _CoAuthor_ID = _myReader_1.GetInt32(4),  
                                                      _Venue_ID = _myReader_1.GetInt32(5) 
                                                    }
                               );
    }
    _myReader_1.Close();
}  

更新
使用的Sql查询如下:

_myCommand_1.CommandText = @"SELECT AC.Author_ID, A.Author_Name, AC.Paper_ID,  
                                    P.Paper_Category, AC.CoAuthor_ID, AP.Venue_ID, AC.Year
                             FROM   AuthorCoAuthor  AC
                             JOIN   AuthorPaper     AP ON AP.Author_ID  = AC.Author_ID AND 
                                                          AP.Paper_ID   = AC.Paper_ID
                             JOIN   Author          A  ON A.Author_ID   = AC.Author_ID
                             JOIN   Paper           P  ON P.Paper_ID    = AP.Paper_ID   
                             ORDER BY  
                                    AC.Author_ID, AC.Year, AC.Paper_ID,  
                                    AC.CoAuthor_ID, AP.Venue_ID";

如何使用SqLDataReader

读入字典键和值

1 个答案:

答案 0 :(得分:1)

这可以使用Indexers。取自:https://stackoverflow.com/a/11583759/4846465

更新模型:

public class AuthorAttributes
{
    private readonly Dictionary<Int32, Int32> _paper = new Dictionary<Int32, Int32>();

    public Int32 this[Int32 key]
    {
        // returns value if exists
        get { return _paper[key]; }

        // updates if exists, adds if doesn't exist
        set { _paper[key] = value; }
    }
    public int _CoAuthor_ID { get; set; }
    public int _Venue_ID { get; set; }
}

然后实现(假设_Paper_ID和_Paper_Category来自哪里):

var attrb = new AuthorAttributes
{
    _CoAuthor_ID = _myReader_1.GetInt32(4),
    _Venue_ID = _myReader_1.GetInt32(5)
}
// Assumes _myReader_1.GetInt32(3) is _Paper_ID
// Assumes _myReader_1.GetInt32(2) is _Paper_Category
attrb[_myReader_1.GetInt32(3)] = _myReader_1.GetInt32(2);
_author._Attributes.Add(attrb);