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: 1549 | Anzahl registrierter User: 1833 | Besucher online: 1832
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-Erweiterung für eindeutige Liste


Autor: Günther Foidl
Sprache: C#
Bewertung: 1,8
(1 Bewertung)
Anzahl der Aufrufe: 5655
  
Kick it on dotnet-kicks.de  

Beschreibung:

Diese Erweiterung nimmt eine Liste und ermittelt aus dieser durch Übergabe eines Schlüssels eine Liste mit eindeutigen Werten.

Beispiel:

class Program
{
static void Main()
{
List<Person> personList = new List<Person>
{
new Person{Name = "Gü"},
new Person{Name = "Andrea"},
new Person{Name = "Gü"}
};

List<Person> myUniqueList = personList.Unique(i => i.Name);
}
}

public class Person
{
public string Name { get; set; }
}

Im Ergebnis werden nur eindeutige Werte in Bezug auf den Namen zurückgegeben.


Abgelegt unter: LINQ, Extension, Liste, eindeutig, Lambda-Ausdruck, Erweiterung, ExtensionMethod.



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
using System;
using System.Collections.Generic;
using System.Linq;

namespace gfoidl.Linq
{
	public static class LinqExtensions
	{
		public static List<T> Unique<K, T>(this List<T> inputList, Func<T, K> func)
		{
			#region Input validation
			if (func == null)
				throw new ArgumentNullException("Key selector function cannot be null");

			if (inputList == null)
				return null;

			if (inputList.Count == 0)
				return new List<T>();
			#endregion

			var grp = inputList.GroupBy(func);
			return grp.Select(g => g.First()).ToList();
		}
	}
}
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.)

Günther Foidl schrieb am:  06.12.2008 13:26:53

Bei einer Bewertung mit 1 wäre die Angabe einer Begründung hilfreich. Oder hat das mit mir zu tun?
Jan Welker schrieb am:  06.12.2008 15:12:09

Ich denke auch, dass eine Begründung angebracht wäre.
Ich finde die schlechte Bewertung nicht gerechtfertigt.
Rainer Hilmer schrieb am:  06.12.2008 22:44:29

Vielleicht kommt die schlechte Bewertung auch durch das fehlerhafte Demo, was ich aber auch für ungerechtfertigt halte. Ich hab's mal korrigiert und um die Ausgabe von myUniqueList erweitert:
class Program
{
static void Main()
{
List<Person> fooList = new List<Person>
{
new Person { Name = "Günther" },
new Person { Name = "Andrea" },
new Person { Name = "Günther" }
};
List<Person> myUniqueList = fooList.Unique(i => i.Name);
foreach (var person in myUniqueList)
{
Console.WriteLine(person.Name);
}

// Verhindert das selbsttätige Schließen des Konsolenfensters.
Console.WriteLine("\nPress any key to terminate the program.");
Console.ReadKey();
}
}

class Person
{
public string Name { get; set; }
}
Rainer Hilmer schrieb am:  06.12.2008 22:46:09

AHA! Spitze Klammern werden hier verschluckt. Dann war dein Demo nicht fehlerhaft, Günther. Ich möchte mich entschuldigen.
Günther Foidl schrieb am:  06.12.2008 22:52:51

Danke Rainer!
Hab das Beispiel jetzt selbst HTML-Encoded (< und >).
hackman schrieb am:  15.11.2010 00:33:39

schon mal die Funktion IEnumerable - Distinct() gesehen?


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#] 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#] LINQ-Ergebnis in DataTable kopieren
[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#] Datei/Ordner durch Erweiterungsmethoden abfragen
[C#] Programmpfad mittels Erweiterung ermitteln
[C#] Invoke Beispiel mittels Erweiterungs Methoden.
[C#] DateTime Extensions liefern TimeStamp
[C#] Komplette Exception Message (inkl. InnerExceptions) ausgeben
[VB.NET] Programmpfad mittels Erweiterung ermitteln in VB
[C#] Type Color serialisieren und deserialisieren
[C#] Extension in einem Dateinamen/Pfad ändern
[C#] Threadsicherer Codeaufruf im Control-Kontext (Invoking)
[C#] Selektieren eines gekapselten Eintrags aus der ComboBox
[C#] Color Extension-Methods
[C#] IsNull and IsNullOrEmpty Extension-Methods become Lazy
[C#] Enum-Extension - Flag in einem Bitfeld gesetzt?
[C#] Anzahl der Monate zwischen 2 DateTime-Objekten (Extension)
[C#] "for" mal anders
[C#] Generische Event Args -> EventArgs
[C#] Lazy Serialization-Extensions including Compression
[C#] SystemIconsImageListWrapper
[C#] Einträge in ListView verschieben
[C#] Liste mit Ereignis bei Änderung der Elementanzahl
[C#] user.config und generische Listen
[C#] Zufallszahlen, die sich nicht wiederholen
[C#] Alle Dateien eines Ordners auflisten - C# Version -
[C#] SortableBindingList
[C#] List string zu List int konvertieren
[C#] Liste mit int array zu Liste mit string array
[C#] Liste durchsuchen
[C#] eindeutigen Dateinamen ermitteln
[C#] WPF - Buttons "OK/Cancel" - endlich unverwechselbar -
[C#] Erweiterung für Stringumwandlungen
[C#] Kleine Array-Erweiterung
[C#] Generator Enumerable Extension Methode

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