¿Hay alguna manera de llenar una matriz mediante un SqlDataReader (o cualquier otro objeto C# ADO.NET) sin recorrer todos los elementos? Tengo una consulta que devuelve una sola columna, y quiero poner eso en una matriz de cadenas (o ArrayList, o Lista, etc.).Llenar una matriz (o una lista de arrays) de SqlDataReader
Respuesta
Es posible. En .NET 2.0+, SqlDataReader
hereda de DbDataReader
, que implementa IEnumerable
(no genérico). Esto significa que se puede utilizar LINQ:
List<string> list = (from IDataRecord r in dataReader
select (string)r["FieldName"]
).ToList();
Dicho esto, el bucle todavía está allí, sino que queda oculta en Enumerable.Select
, en lugar de ser explícita en el código.
Dado que cualquier implementación de IDataReader
(SqlDataReader
incluida) será un lector de solo reenvío por definición, no hay forma de hacerlo sin bucle. Incluso si hubiera un método de biblioteca de marcos para hacer esto, tendría que pasar por el lector, tal como lo haría.
No, ya que SqlDataReader
es un sólo avance de sólo lectura corriente de las filas de una base de datos SQL Server, el flujo de filas se bucle a través ya sea de forma explícita en el código o escondido en un marco de implementación (por ejemplo, el método de DataTable Load
)
Parece que usar una lista genérica y luego devolver la lista como una matriz sería una buena opción. Por ejemplo,
List<int> list = new List<int>();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
list.Add(reader.GetInt32(0));
}
}
return list.ToArray();
En respuesta a tu comentario, llamando ToArray() pueden ser aéreas, depende. ¿Necesita una matriz de objetos para trabajar o sería más útil una colección genérica (como List<T>
o ReadOnlyCollection<T>
)?
¿Crees que el método TaArray() es solo más gastos generales? – user161433
Tienes que hacer bucles, pero hay proyectos que pueden hacerlo más simple. Además, trate de no usar ArrayList, use List en su lugar.
usted puede comprobación FluentAdo una: http://fluentado.codeplex.com
public IList<UserAccount> List()
{
var list = new FluentCommand<UserAccount>("SELECT ID, UserName, Password FROM UserAccount")
.SetMap(reader => new UserAccount
{
ID = reader.GetInt("ID"),
Password = reader.GetString("Password"),
UserName = reader.GetString("UserName"),
})
.AsList();
return list;
}
Si usted lee su SqlDataAdapter en un DataTable:
DataTable dt as DataTable;
dt.fill(data);
continuación, puede utilizar algunos de los juguetes en System.Data.DataSetExtensions
como se indica en la respuesta de Joel Muller a este question.
En utiliza un poco de LINQ, por lo que tendrá una red .Net 3.5 o superior.
Al parecer, desde que .NET 1.1 tenían SqlDataReader
the following method:
int size;
object[] data = new object[]{};
size = reader.GetValues(data);
Este puebla data
con los valores de la fila lector actual, asignando al tamaño del número de objetos que se pusieron en la matriz.
OP orignial solicitó Array, ArrayList o List. Puedes devolver Array también. Simplemente llame al método .ToArray() y asígnelo a una matriz previamente declarada. Las matrices son muy rápidas cuando se trata de enumerar cada elemento. Mucho más rápido que una lista si la lista tiene más de 1000 elementos. Puede regresar a Array, List o Dictionary.
ids_array = (from IDataRecord r in idReader
select (string)r["ID"]).ToArray<string>();
Además, si está utilizando una búsqueda de claves, por ejemplo, usted podría considerar la creación de un objeto HashSet con tiene un excelente rendimiento de la búsqueda si simplemente está mirando una lista contra otro para determinar si existe una clave de elementos en el Objeto HashSet. ejemplo:
HashSet<string> hs = new HashSet<string>(
(from IDataRecord r in idReader select (string)r["ID"]).AsEnumerable<string>());
- 1. Llenar lista de la matriz
- 2. Cómo llenar una lista
- 3. Mueva datos de una lista de arrays a otra lista de arrays en C#
- 4. ¿Cómo ordenar una lista de arrays de objetos java?
- 5. Dividir una matriz en algunos sub-arrays
- 6. Buscar una expresión regular en una lista de arrays java
- 7. Convierta una lista de caracteres (o matriz) en una cadena
- 8. Llenar una matriz con números secuencialmente
- 9. ¿Cómo puedo almacenar una lista de arrays de objetos personalizados?
- 10. Guardar una lista de arrays de Cadenas para preferencias compartidas
- 11. ¿Cómo mostrar todos los elementos en una lista de arrays?
- 12. Cómo devolver una lista de arrays desde un método
- 13. enviando una lista de arrays a la actividad principal
- 14. ¿Cómo llenar una matriz de bytes con basura?
- 15. SqlDataReader dentro de SqlDataReader
- 16. cómo llenar una vista de lista de forma asincrónica?
- 17. ¿Cómo creo una lista de matriz multidimensional en C#?
- 18. C# - Rellene la lista genérica de SqlDataReader
- 19. Llenar una lista desplegable de forma dinámica con Javascript/jQuery
- 20. Cómo llenar una tabla de datos con una lista (de t) o convertir una lista (de t) en una tabla de datos?
- 21. Arrays PHP: ¿cómo hacer una matriz unidimensional en una matriz multidimensional anidada?
- 22. Mejor/más rápida forma de llenar una gran matriz en C#
- 23. SqlDataReader Lista de rendimiento <string[]> o Lista <object[]>
- 24. matriz de punteros a char arrays
- 25. forma de Scala de llenar una plantilla?
- 26. ¿Cálculo promedio de una lista de matriz?
- 27. buscar duplicados en la lista de arrays
- 28. Girar una matriz de lista de lista en Clojure
- 29. ¿Cómo puedo llenar rápidamente una matriz con un valor específico?
- 30. Pasando una matriz o lista a @Pathvariable - Spring/Java
+1. Eliminé mis respuestas a favor de las tuyas. –
Hay másters aquí. Buena respuesta. – Tarik
Funciona como un campeón, gracias! – ristonj