Convertir DataSet en liste

Voici mon code c #

Employee objEmp = new Employee(); List empList = new List(); foreach (DataRow dr in ds.Tables[0].Rows) { empList.Add(new Employee { Name = Convert.ToSsortingng(dr["Name"]), Age = Convert.ToInt32(dr["Age"]) }); } 

Il utilise une boucle pour créer une liste à partir d’un jeu de données. Existe-t-il une méthode directe ou une méthode plus courte ou un code de ligne pour convertir un jeu de données en liste?

Essayez quelque chose comme ça:

 var empList = ds.Tables[0].AsEnumerable().Select(dataRow => new Employee{Name = dataRow.Field("Name")}).ToList(); 

Voici la méthode d’extension pour convertir DataTable en liste d’objects:

  public static class Extensions { public static List ToList(this DataTable table) where T : new() { IList properties = typeof(T).GetProperties().ToList(); List result = new List(); foreach (var row in table.Rows) { var item = CreateItemFromRow((DataRow)row, properties); result.Add(item); } return result; } private static T CreateItemFromRow(DataRow row, IList properties) where T : new() { T item = new T(); foreach (var property in properties) { if (property.PropertyType == typeof(System.DayOfWeek)) { DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), row[property.Name].ToSsortingng()); property.SetValue(item,day,null); } else { if(row[property.Name] == DBNull.Value) property.SetValue(item, null, null); else property.SetValue(item, row[property.Name], null); } } return item; } } 

usage:

 List lst = ds.Tables[0].ToList(); 

@ itay.b CODE EXPLIQUE: Nous lisons d’abord tous les noms de propriétés de la classe T en utilisant la reflection
puis nous parcourons toutes les lignes de datatable et créons un nouvel object de T,
Nous définissons ensuite les propriétés de l’object nouvellement créé en utilisant la reflection.

Les valeurs de propriété sont extraites de la cellule de colonne correspondante de la ligne.

PS: le nom de la propriété de la classe et les noms des colonnes de la table doivent être identiques

 var myData = ds.Tables[0].AsEnumerable().Select(r => new Employee { Name = r.Field("Name"), Age = r.Field("Age") }); var list = myData.ToList(); // For if you really need a List and not IEnumerable 

Essayez ceci …. modifiez le code selon vos besoins.

  List target = dt.AsEnumerable() .Select(row => new Employee { Name = row.Field(0).GetValueOrDefault(), Age= row.Field(1) }).ToList(); 

Ajoutez une nouvelle classe nommée “Helper” et changez la propriété de la classe en “public static”

 public static class Helper { public static List DataTableToList(this DataTable table) where T : class, new() { try { List list = new List(); foreach (var row in table.AsEnumerable()) { T obj = new T(); foreach (var prop in obj.GetType().GetProperties()) { try { PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.Name); propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], propertyInfo.PropertyType), null); } catch { continue; } } list.Add(obj); } return list; } catch { return null; } } } 

et accédez à cette classe dans votre code comme ci-dessous

  DataTable dtt = dsCallList.Tables[0]; List lstCallAssignement = dtt.DataTableToList(); 

Remplir le jeu de données avec des données, par exemple une commande stockée

 DbDataAdapter adapter = DbProviderFactories.GetFactory(cmd.Connection).CreateDataAdapter(); adapter.SelectCommand = cmd; DataSet ds = new DataSet(); adapter.Fill(ds); 

Obtenez le schéma,

 ssortingng s = ds.GetXmlSchema(); 

enregistrez-le dans un fichier disons: datasetSchema.xsd. Générez les classes C # pour le schéma: (à l’invite de commande VS)

 xsd datasetSchema.xsd /c 

Maintenant, lorsque vous devez convertir les données DataSet en classes, vous pouvez les désérialiser (le nom par défaut donné à la classe racine générée est NewDataSet):

 public static T Create(ssortingng xml) { XmlSerializer serializer = new XmlSerializer(typeof(T)); using (SsortingngReader reader = new SsortingngReader(xml)) { T t = (T)serializer.Deserialize(reader); reader.Close(); return t; } } var xml = ds.GetXml(); var dataSetObjects = Create(xml); 
  DataSet ds = new DataSet(); ds = obj.getXmlData();// get the multiple table in dataset. Employee objEmp = new Employee ();// create the object of class Employee List empList = new List(); int table = Convert.ToInt32(ds.Tables.Count);// count the number of table in dataset for (int i = 1; i < table; i++)// set the table value in list one by one { foreach (DataRow dr in ds.Tables[i].Rows) { empList.Add(new Employee { Title1 = Convert.ToString(dr["Title"]), Hosting1 = Convert.ToString(dr["Hosting"]), Startdate1 = Convert.ToString(dr["Startdate"]), ExpDate1 = Convert.ToString(dr["ExpDate"]) }); } } dataGridView1.DataSource = empList; 

entrer la description de l'image ici

Utilisez le code ci-dessous:

 using Newtonsoft.Json; ssortingng JSONSsortingng = ssortingng.Empty; JSONSsortingng = JsonConvert.SerializeObject(ds.Tables[0]); 

Je n’ai pas pu obtenir la réponse de Nitin Sawant au travail, mais j’ai pu modifier son code pour qu’il fonctionne pour moi. Essentiellement, je devais utiliser GetRuntimeFields au lieu de GetProperties. Voici ce que j’ai fini avec:

 public static class Extensions { public static List ToList(this DataTable table) where T : new() { IList fields = typeof(T).GetRuntimeFields().ToList(); List result = new List(); if (row.Table.Columns.Contains(field.Name)) { foreach (var row in table.Rows) { var item = CreateItemFromRow((DataRow)row, fields); result.Add(item); } } return result; } private static T CreateItemFromRow(DataRow row, IList fields) where T : new() { T item = new T(); foreach (var field in fields) { if (row[field.Name] == DBNull.Value) field.SetValue(item, null); else field.SetValue(item, row[field.Name]); } return item; } } 

Essayez ce qui précède qui fonctionnera avec n’importe quel type de liste.

  public DataTable ListToDataTable(IList data) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); for (int i = 0; i < props.Count; i++) { PropertyDescriptor prop = props[i]; table.Columns.Add(prop.Name, prop.PropertyType); } object[] values = new object[props.Count]; foreach (T item in data) { for (int i = 0; i < values.Length; i++) { values[i] = props[i].GetValue(item); } table.Rows.Add(values); } return table; } 
  List ListToGetJwToMfData = new List(); DataSet getJwtMF = new DataSet(); getJwtMF = objgst_jobwork_to_mfgmaster_BLL.GetDataJobWorkToMfg(AssesseeId, PremiseId, Fyear, MonthId, out webex); if(getJwtMF.Tables["gst_jobwork_to_mfgmaster"] != null) { ListToGetJwToMfData = (from master in getJwtMF.Tables["gst_jobwork_to_mfgmaster"].AsEnumerable() select new GSTEntity.gst_jobwork_to_mfgmaster { Partygstin = master.Field("Partygstin"), Partystate = master.Field("Partystate"), NatureOfTransaction = master.Field("NatureOfTransaction"), ChallanNo = master.Field("ChallanNo"), ChallanDate=master.Field("ChallanDate"), OtherJW_ChallanNo=master.Field("OtherJW_ChallanNo"), OtherJW_ChallanDate = master.Field("OtherJW_ChallanDate"), OtherJW_GSTIN=master.Field("OtherJW_GSTIN"), OtherJW_State = master.Field("OtherJW_State"), InvoiceNo = master.Field("InvoiceNo"), InvoiceDate=master.Field("InvoiceDate"), Description =master.Field("Description"), UQC= master.Field("UQC"), qty=master.Field("qty"), TaxValue=master.Field("TaxValue"), Id=master.Field("Id") }).ToList();