El tutorial o código que encontrarás en este post es la solución más eficiente y válida que hallamos a tus dudas o dilema.
Solución:
Mi problema también es que tengo autos en la lista genérica List Cars y quiero pasar esta lista al procedimiento almacenado. ¿Existe una forma elegante de cómo hacerlo?
Necesitas convierta su lista genérica Car a una tabla de datos y luego pasarlo al procedimiento almacenado. Un punto a tener en cuenta es que el orden de sus campos debe ser igual que se define en el tipo de tabla definida por el usuario en base de datos De lo contrario, los datos no se guardarán correctamente. y eso debe tener el mismo número de columnas también.
Uso este método para convertir List a DataTable. Puedes llamarlo como yourList.ToDataTable()
public static DataTable ToDataTable(this List iList)
DataTable dataTable = new DataTable();
PropertyDescriptorCollection propertyDescriptorCollection =
TypeDescriptor.GetProperties(typeof(T));
for (int i = 0; i < propertyDescriptorCollection.Count; i++)
PropertyDescriptor propertyDescriptor = propertyDescriptorCollection[i];
Type type = propertyDescriptor.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
type = Nullable.GetUnderlyingType(type);
dataTable.Columns.Add(propertyDescriptor.Name, type);
object[] values = new object[propertyDescriptorCollection.Count];
foreach (T iListItem in iList)
for (int i = 0; i < values.Length; i++)
values[i] = propertyDescriptorCollection[i].GetValue(iListItem);
dataTable.Rows.Add(values);
return dataTable;
Sé que esto es un poco viejo, pero pensé que lo publicaría de todos modos ya que busqué hacerlo un poco más fácil. Espero haberlo hecho con un paquete NuGet que creo que permitirá código como:
public class CarType
public int CARID get; set;
public string CARNAME get; set;
var cars = new Listnew CarType CARID = 1, CARNAME = "Volvo";
var parameters = new DynamicParameters();
parameters.AddTable("@Cars", "CarType", cars)
var result = con.Query("InsertCars", parameters, commandType: CommandType.StoredProcedure);
Paquete NuGet: https://www.nuget.org/packages/Dapper.ParameterExtensions/0.2.0
Todavía está en sus primeras etapas, ¡así que puede que no funcione con todo!
Lea el LÉAME y siéntase libre de contribuir en GitHub: https://github.com/RasicN/Dapper-Parameters
Aquí puedes ver las reseñas y valoraciones de los lectores
Al final de todo puedes encontrar las críticas de otros creadores, tú además tienes la libertad de dejar el tuyo si lo crees conveniente.