So füllen Sie eine benutzerdefinierte list <> von SQL server aus

Ich habe eine class namens Author.cs definiert als:

 public class Author : Interfaces.INode { private List<INode> _targetList; private List<IAttribute> _attributeObject; // Author class Constructor public Author() { _targetList = new List<INode>(); } //implementazion of _TargetObject INode method public List<INode> _TargetObject { get { return _targetList; } } //implementazion of _AttributeObject INode method public List<IAttribute> _AttributeObject { get { return _attributeObject; } } public int _aID { get; set; } public string _aName { get; set; } // 'CoAuthor', 'Venue' and 'Paper' are classes that // implements an interface ie `IAttribute` public List<CoAuthor> _aCoAuthors { get; set; } public List<Venue> _aVenue { get; set; } public List<Paper> _aPapers { get; set; } public string _aArea { get; set; } } 

die eine interface im Interfaces Ordner mit dem Namen Interfaces.INode.cs implementiert als:

 public interface INode { List<INode> _TargetObject { get; } List<IAttribute> _AttributeObject { get; } } public interface IAttribute : INode {} 

Jetzt möchte ich eine list ausfüllen, dh List<Author> dh in einer anderen class namens AuthorCollector.cs

 List<Author> _eAthors = new List<Author>(); 

Ich habe versucht wie:

 try { SqlCommand _myCommand_1 = _con.CreateCommand(); _myCommand_1.CommandText = @"SELECT Author_ID FROM M_DataFull ORDER BY Author_ID, Year"; var _AuthID = 0; int _Row_Counter = 0; using (SqlDataReader _myReader_1 = _myCommand_1.ExecuteReader()) { while (_myReader_1.Read()) { _Row_Counter++; _eAthors.Add(Convert.ToInt32(_myReader_1["Author_ID"])); } _myReader_1.Close(); } } catch(Exception e) { Console.WriteLine(e.Message); } 

Der Fehler ist:
Die beste überladene Methode _eAuthors.Add() für _eAuthors.Add() hat einige ungültige Argumente.
Bitte helfen Sie in dieser Hinsicht.

 using (SqlDataReader _myReader_1 = _myCommand_1.ExecuteReader()) { while (_myReader_1.Read()) { _Row_Counter++; Author author = new Author(); author._aId = Convert.ToInt32(_myReader_1["Author_ID"]); author._aName = Convert.ToString(_myReader_1["Author_Name"]); //etc... _eAthors.Add(author); } _myReader_1.Close(); } 

Sie versuchen, eine int zu einer list von Autoren hinzuzufügen. Pseudocode:

 _eAthors.Add(new Author(Convert.ToInt32(_myReader_1["Author_ID"]))); 

oder

  _eAthors.Add(new Author(){_aID =Convert.ToInt32(_myReader_1["Author_ID"]})); 

sowieso würde ich ein ORM-Framework für diese wie NHibernate oder EntityFramework verwenden. Es ist viel einfacher als alle SQL-Mapping selbst zu machen …

_eAthors ist eine Sammlung von Authors , aber der Code versucht, einen int Wert hinzuzufügen, der in diesem Fall einen Fehler verursacht.

Ändern Sie diese Zeile

 _eAthors.Add(Convert.ToInt32(_myReader_1["Author_ID"])) 

nach

 _eAthors.Add(new Author { _aid= Convert.ToInt32(_myReader_1["Author_ID"]), // add additional properties if you have one. });