myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Objektliste: Duplikate hinsichtlich von nur drei der Properties entfernen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Objektliste: Duplikate hinsichtlich von nur drei der Properties entfernen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
kraeppy
myCSharp.de-Mitglied

Dabei seit: 26.10.2010
Beiträge: 30
Entwicklungsumgebung: VisualStudio 2008


kraeppy ist offline

Objektliste: Duplikate hinsichtlich von nur drei der Properties entfernen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

guten tach auch :)

ich habe folgende frage/folgendes problem:

ich habe eine objektliste (nennen wir die mal Mainlist) vorliegen mit den attributen at1-at20. ich erstelle gerade eine liste (Neuelist) mit dem algorithmus:

C#-Code:
bool InList;
foreach object oM in Mainlist
{
     InList = false;
     foreach object oN in Neuelist
     {
         wenn (oM.at1 == oN.at1 && oM.at2 == oN.at2 && oM.at3 == oN.at3)
         {
            InList = true;
            break;
          }
     }
     if (!InList)
     {
       oN.Add(oM);
     }
}

ich versuche die ganze zeit das einmal als linq auszudrücken und einmal über oM.GroupBy(y => ......).... nur ich komme einfach nicht zum ziel -.-
ich habe mir z.b.  C# Linq Group By on multiple columns durchgelesen, aber bei den beispielen hatte ich folgende probleme:

ich möchte mir die Neuelist gerne in einem datagridview anzeigen lassen. wenn ich nach dem GroupBy(....) dann Select( x => new {spalteAt1 = x.At1.....}) schreibe, kann ich nur auf die Attribute zurückgreifen, die in der GroupBy-Klausel stehen, nicht aber at4, at5 etc. ich hatte auch nur eine spalte, nämlich 'Key' und leider nicht, wie erhofft, mehrere.

daher meine frage: wie kann ich in einer objekt-liste, in der jedes objekt die attribute at1-at20 hat, nach 3 attributen distinct selektieren aber trotzdem in dieser 'collection' sag ich jetzt einfach mal auf alle anderen attribute zurückgreifen?

danke schonmal im voraus :)
gruß

kraeppy

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kraeppy am 18.07.2012 11:28.

18.07.2012 11:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Darth Maim Darth Maim ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.10.2009
Beiträge: 199
Entwicklungsumgebung: Visual Studio 2010


Darth Maim ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von kraeppy:
ich hatte auch nur eine spalte, nämlich 'Key'

Kann es sein das du keine Liste, sonder ein Dictionary hast? Wenn ja, kommst du statt mit x.At1 mit x.Value.At1 an deine Properties (Attribute sind was anderes).

Darth Maim
18.07.2012 11:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
winSharp93 winSharp93 ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2918.png


Dabei seit: 19.01.2007
Beiträge: 5.711
Entwicklungsumgebung: VS 2010 Professional
Herkunft: Freiburg / Stuttgart


winSharp93 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Um es von der anderen Seite anzugehen: Du möchtest also quasi Duplikate eliminieren, wobei sich ein" Duplikat" durch Übereinstimmen der entsprechenden Attribute ausdrückt?

Dann reicht vermutlich schon die Überladung von Distinct, die einen IEqualityComparer entgegennimmt.
18.07.2012 11:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Sarc
myCSharp.de-Mitglied

Dabei seit: 29.09.2008
Beiträge: 288
Entwicklungsumgebung: VS 2012


Sarc ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

dein Typ für oM und oN ist identisch oder?
Dann erstell dir doch einen IEqualityComparer<> und verwende diesen in der .Distinct()-Methode.
In der Equals-Methode vergleichst du dann einfach deine 3 Attribute.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Sarc am 18.07.2012 12:00.

18.07.2012 11:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
kraeppy
myCSharp.de-Mitglied

Dabei seit: 26.10.2010
Beiträge: 30
Entwicklungsumgebung: VisualStudio 2008

Themenstarter Thema begonnen von kraeppy

kraeppy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

jo danke schomma für die antworten :) hat n bissle gedauert, war u.a. inner pause ^^

@ Darth Maim: ich benutze eine (normale) generische liste List<>
@ winSharp93, Sarc: ich werde mich mal mit dem IEqualityComparer auseinandersetzen, danke für den hinweis :)

gruß
kraeppy
18.07.2012 13:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
kraeppy
myCSharp.de-Mitglied

Dabei seit: 26.10.2010
Beiträge: 30
Entwicklungsumgebung: VisualStudio 2008

Themenstarter Thema begonnen von kraeppy

kraeppy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

für alle, die nach einer beschreibung suchen:
 How and when to use IEqualityComparer in C#
18.07.2012 15:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 10 Monate.
Der letzte Beitrag ist älter als 10 Monate.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 23.05.2013 22:22