Gibt es eine Möglichkeit, ein Array über ein SqlDataReader (oder ein anderes C# ADO.NET-Objekt) zu füllen, ohne alle Elemente durchlaufen zu müssen? Ich habe eine Abfrage, die eine einzelne Spalte zurückgibt, und ich möchte das in ein Zeichenfolgenarray (oder ArrayList oder Liste usw.) einfügen.Füllen Sie ein Array (oder Arraylist) von SqlDataReader
Antwort
Es ist möglich. In .NET 2.0+ erbt SqlDataReader
von DbDataReader
, die IEnumerable
(nicht-generische) implementiert. Dies bedeutet, dass Sie LINQ verwenden können:
List<string> list = (from IDataRecord r in dataReader
select (string)r["FieldName"]
).ToList();
Das heißt, die Schleife ist immer noch da, es ist nur in Enumerable.Select
versteckt, anstatt in Ihrem Code explizit zu sein.
Da alle IDataReader
Implementierung (SqlDataReader
enthalten) per Definition ein forward-only Leser sein wird, gibt es keine Möglichkeit, dies ohne Schleifen zu tun. Selbst wenn es eine Framework-Bibliotheksmethode gäbe, müsste dies den Reader durchlaufen, genau wie Sie es tun würden.
Nein, da SqlDataReader
ist ein Vorwärts-Nur-Lese-Strom von Zeilen aus einer SQL Server-Datenbank, wird die Liste der Zeilen durch, ob explizit in Ihrem Code oder versteckt in einer Framework-Implementierung (wie Datatable des Load
Verfahren durchgeschleift werden).
Es klingt wie die Verwendung einer generischen Liste und die Rückgabe der Liste als Array wäre eine gute Option. Beispiel:
List<int> list = new List<int>();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
list.Add(reader.GetInt32(0));
}
}
return list.ToArray();
Als Reaktion auf Ihren Kommentar kann der Aufruf von ToArray() möglicherweise Overhead sein, es hängt davon ab. Benötigen Sie ein Array von Objekten, mit denen Sie arbeiten können, oder wäre eine generische Sammlung (wie List<T>
oder ReadOnlyCollection<T>
) nützlicher?
Denken Sie, dass TaArray() -Methode nur mehr Aufwand ist? – user161433
Sie müssen Schleife, aber es gibt Projekte, die es einfacher machen können. Versuchen Sie auch, ArrayList nicht zu verwenden, sondern stattdessen List.
Sie können FluentAdo Kasse für einen: 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;
}
Wenn Sie lesen Ihre SqlDataAdapter in eine Datatable:
DataTable dt as DataTable;
dt.fill(data);
Dann einige der Spielzeug in System.Data.DataSetExtensions
in Joel Muller Antwort als verwiesen auf diese question.
In verwendet ein bisschen Linq verwenden können, so werden Sie Net 3.5 oder höher net.
Offenbar seit .NET 1.1 SqlDataReader
the following method hatte:
int size;
object[] data = new object[]{};
size = reader.GetValues(data);
Diese data
mit den Werten der aktuellen Leser Reihe auffüllt, die Anzahl der Objekte zuweisen in Größe, die in das Array gesetzt wurden.
Das OR-OP hat nach Array, ArrayList oder List gefragt. Sie können auch Array zurückgeben. Rufen Sie einfach die .ToArray() -Methode auf und weisen Sie sie einem zuvor deklarierten Array zu. Arrays sind sehr schnell, wenn es darum geht, jedes Element aufzuzählen. Viel schneller als eine Liste, wenn die Liste mehr als 1000 Elemente enthält. Sie können zu Array, Liste oder Wörterbuch zurückkehren.
ids_array = (from IDataRecord r in idReader
select (string)r["ID"]).ToArray<string>();
Außerdem, wenn Sie eine Suche nach Schlüsseln zum Beispiel verwenden, können Sie ein HashSet Objekt erstellen betrachten mit ausgezeichneter Suchleistung hat, wenn man einfach gegen eine andere Liste werden überprüft, um zu bestimmen, ob ein Element Schlüssel in der existiert HashSet-Objekt. Beispiel:
- 1. Füllen Sie Listenansicht von Arraylist von Objekten
- 2. Füllen Sie ein Aktionsblatt mit einem Array
- 3. Füllen Sie ein Array mit Etiketten
- 4. List (of String) oder Array oder ArrayList
- 5. Die beste Methode zum Füllen von DataSet aus einem SQLDataReader
- 6. Erstellen Sie ein Array von ArrayList <String> Elemente
- 7. Füllen Sie ein Array von Model-Objekten mit Mungo
- 8. ArrayList oder Array-Stack in Android
- 9. Static ArrayList - erweiterte Schleife füllen
- 10. Erstellen Sie ein Array von zwanzig ganzen Zahlen und füllen Sie das Array mit geraden Zahlen
- 11. Erstellen Sie ein Array in JavaScript, um jsTree zu füllen
- 12. Füllen von Formularfeldern mit Array
- 13. Verwenden von ArrayList oder HashMap
- 14. Ein Array in einer LinkedList füllen?
- 15. bash füllen ein Array in Schleife
- 16. Wie instanziieren, initialisieren und füllen Sie ein Array in TypeScript?
- 17. Füllen Sie ein Array aus XML-Datei mit Serializable()
- 18. Füllen Sie ein Array zur Kompilierzeit aus Datei
- 19. So füllen Sie ein Array mit Kanälen in go
- 20. Konvertieren einer Java ArrayList von Zeichenfolgen in ein JavaScript-Array
- 21. Ein Array einer ArrayList in Java zuweisen
- 22. hinzufügen String Array Arraylist
- 23. Füllen UITableview mit Instanz zu füllen Array
- 24. Index von ArrayList von Array nachschlagen
- 25. Füllen Sie Javascript-Array mit C#
- 26. jQuery Autocomplete Array Füllen
- 27. Konvertieren von ArrayList zu Array in Java
- 28. PHP füllen dynamisch Array
- 29. Wie ein Spinner von String-Array füllen zu
- 30. Zurückgeben eines Array von Palindrome - Konvertieren von Arraylist in Array
+1. Entfernt meine Antworten zugunsten Ihrer. –
Hier sind Meister. Gute Antwort. – Tarik
Funktioniert wie ein Champion, danke! – ristonj