Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 85
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

LINQ-Ergebnis in DataTable kopieren


Autor: Günther Foidl
Sprache: C#
Bewertung:
5.62 (3 votes)
Anzahl der Aufrufe: 10391
  
Kick it on dotnet-kicks.de  

Beschreibung:

Dieses Snippet beschreibt eine Erweiterung mit der das Ergebnis einer (einfachen) LINQ-Abfrage in ein DataTable kopiert werden kann.

Verwendung:

using gfoidl.Tools.Linq;
...
DataClasses1DataContext db = new DataClasses1DataContext();

var countries =
from c in db.Countries
select new
{
c.ID,
c.Name
};

DataTable dt = countries.Linq2DataTable();



Abgelegt unter: LINQ, DataTable.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Data;
using System.Reflection;

namespace gfoidl.Tools.Linq
{
	/// <summary>
	/// Erweiterungsmethoden für LINQ
	/// </summary>
	public static class gfLinqExtensions
	{
		/// <summary>
		/// Konvertiert das Ergebnis einer LINQ-Abfrage in ein DataTable
		/// </summary>
		/// <typeparam name="T">
		/// generischer Typ
		/// </typeparam>
		/// <param name="list">
		/// Ergebnis der LINQ-Abfrage
		/// </param>
		/// <returns>
		/// DataTable
		/// </returns>
		/// <example>
		/// <code>
		/// var countries =
		///		from c in db.Countries
		///		select new
		///		{
		///			c.ID,
		///			c.Name
		///		};
		///		
		///	DataTable dt = countries.Linq2DataTable();
		/// </code>
		/// </example>
		public static DataTable Linq2DataTable<T>(this IEnumerable<T> list)
		{
			// DataTable mit Namen aus GUID erstellen:
			DataTable dt = new DataTable(Guid.NewGuid().ToString());

			// Spaltennamen:
			PropertyInfo[] cols = null;

			// Ist das LINQ-Ergebnis null wird ein leeres DataTable 
			// zurückgegeben:
			if (list == null)
				return dt;

			// Alle Elemente der Liste durchlaufen (LINQ-Ergebnis):
			foreach (T item in list)
			{
				// Die Spaltennamen werden per Reflektion ermittelt.
				// Wird nur beim 1. Durchlauf ermittelt:
				if (cols == null)
				{
					// Alle Spalten ermitteln:
					cols = item.GetType().GetProperties();

					// Spalten durchlaufen und im DataTable die Spalten erstellen:
					foreach (PropertyInfo pi in cols)
					{
						// Spaltentyp:
						Type colType = pi.PropertyType;

						if (colType.IsGenericType &&
							colType.GetGenericTypeDefinition() == typeof(Nullable<>))
							colType = colType.GetGenericArguments()[0];

						// Spalte der DataTable hinzufügen:
						dt.Columns.Add(new DataColumn(pi.Name, colType));
					}
				}

				// Zeile hinzufügen:
				DataRow dr = dt.NewRow();
				foreach (PropertyInfo pi in cols)
					dr[pi.Name] =
						pi.GetValue(item, null) ?? DBNull.Value;

				dt.Rows.Add(dr);
			}

			return dt;
		}
	}
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



Diese Snippets könnten für Sie interessant sein:
[C#] Dateien suchen mit LINQ
[C#] Generischer Converter für CSV Dateien
[C#] LINQ kumulierte Summe
[C#] LINQ Rang im Ergebnis
[C#] LINQ-Erweiterung für eindeutige Liste
[C#] Search Plugin-DLLs with one line
[C#] Intellisense Unterstützung für XML Dateien für LINQ
[VB.NET] DataGridView Databinding mit LINQtoSQL
[VB.NET] Master-Detail Ansicht auf SQL Server-Daten mit LINQ-to-SQL
[C#] Controls gleichen Typs von einem Container in Winform holen
[C#] LINQ to Twitter via kostenloser 3rd Party Library
[C#] SQL Server Daten in Exel-Datei exportieren mit LINQ
[C#] LINQ to Flickr via kostenloser 3rd Party Library nutzen
[VB.NET] ChangeConflicts in LINQ-To-SQL behandeln
[C#] Sequential GUID
[C#] Listen effektiv in ein Datenbankfeld speichern
[C#] Auf Daten eines SAP-Systems in Silverlight zugreifen
[C#] Kleinsten key in einem Dictionary mit LINQ abfragen
[C#] Daten aus SAP-System als ADO.NET Data Service bereitstellen
[C#] Dateisystem Abfragen mit LINQ erstellen
[C#] XML generieren mit Linq to XML
[C#] Mit LINQ und Join Collections zusammenführen
[C#] Dateien mit bestimmter Extension rekursiv in Array einlesen
[C#] Mit LINQ to SQL auf eine Datenbank zugreifen
[C#] Mit LINQtoXML XML Dateien erzeugen bzw. abfragen
[C#] Excel: DataTable mittels OLEDB in Excel-Dokument exportieren
[ASP.net] Dataset nur zum Teil im Gridview anzeigen
[C#] Methode CheckMaxLength() als Ereignis für DataTable
[C#] Pivot-Tabelle erstellen
[C#] CSV und XML-Datei Datenbank-Import (incl. valid-check)
[C#] XML in DataTable laden
[VB.NET] Convert DataGridViewRow nach DataRow
[VB.NET] Convert DataGridViewRow nach Objekt-Typ
[C#] CSV Datei in DataTable einlesen
[C#] DataTable in CSV Datei speichern
[C#] CSV Datei in Datatable einlesen
[C#] doppelte Zeilen aus DataTable löschen
[C#] Prüfen ob eine Spalte in einer Datatable existiert
[C#] Zufällige Row aus DataTable
[C#] Excel-Export ohne Excel (auch für Web)
[C#] Connection-String Dialog öffnen
[VB.NET] DataTable: schnelle Erstellung eines DataRow-Objekts

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.