maliks
maliks

Reputation: 1112

Reading into a Dictionary from SqlDataReader

I declared a Dictionary in a class as:

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; }
}  

whereas Dictionary will store _Paper_ID and _Paper_Category both of type Int32 as _Paper.

While reading data from SQL Server as:

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();
}  

UPDATE
The Sql query used is as:

_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";

How will I read into Dictionary Key and Value using SqLDataReader

Upvotes: 1

Views: 1107

Answers (1)

Ryan Peters
Ryan Peters

Reputation: 180

This can work using Indexers. Taken from: https://stackoverflow.com/a/11583759/4846465

Update the model:

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; }
}

Then to implement (assumptions on where _Paper_ID and _Paper_Category come from):

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);

Upvotes: 1

Related Questions