2013-12-13 9 views
5

Ich bin mit C# framework 3.5 ..Wie bekomme ich eine Liste von einer benutzerdefinierten Liste?

meiner Klasse hier

public class KonumBilgisi 
{ 

    public string Enlem { get; set; } 
    public string Boylam { get; set; } 
    public string KonumAdi { get; set; } 
    public DateTime Tarih { get; set; } 
    public byte SucTuruId { get; set; } 

} 

I

Liste konumlar eine Liste haben;

gut, ich will Produkte erhalten, die ihre enlem und boylam Variablen einander gleich ..

Wie Sie unten

auf dem Foto sehen enter image description here

I enlem und boylam compate wollen und Wenn es das gleiche ist, möchte ich sie zu verschiedenen Liste ..

Ich kann das mit einer Schleife tun, aber LINQ verwenden möchten, aber ich könnte das nicht tun. Ich benutzte groupby aber es tut falsch ..

var distinctList = konumlar.GroupBy(x => x.Enlem) 
         .Select(g => g.First()) 
         .ToList().GroupBy(s=>s.Boylam).Select(g => g.First()) 
         .ToList(); 

EDIT Eigentlich könnte ich meine quesion gut erklären ..

vielleicht unterscheidet nicht richtige Wort .. Ich will Elemente trennen, die gleich jeder andere ..

wie:

I pendik Artikel in einer Liste und andere werden in konumlar sein, aber pendik Einzelteile werden entfernt von konuml nehmen ar Liste

EDIT 2

Okay, ich möchte so die Liste trennen

enter image description here

enter image description here

+0

Sie möchten gleiche oder unterschiedliche Artikel extrahieren? –

+0

extrahieren und auch aus der Liste .. Ich meine, ich möchte sie voneinander trennen – ertan2002

+0

Es würde helfen, wenn Sie das gewünschte Ergebnis zeigen würden. Sie erwähnen auch eine zweite Liste, aber Sie haben es nicht gezeigt. –

Antwort

4

Sie sind fast da - anstatt mit zwei getrennten GroupBy Anrufe, Verwenden Sie einen einzelnen, mit einem zweiteiligen Schlüssel:

EDIT: Um alle Elemente außer diejenigen mit Duplikate zu erhalten, ändern Sie die Abfrage wie folgt:

var noPendiks = konumlar 
    .GroupBy(s => new {s.Enlem, s.Boylam}) 
    .Where(g => g.Count() == 1) 
    .Select(g => g.Single()) // You know there's only one 
    .ToList(); 

Die oben geben Sie alle Artikel, mit Ausnahme der „pendik“ sind. Um nur die „pendik“ s, verwenden Sie die folgende Abfrage:

var pendiks = konumlar 
    .GroupBy(s => new {s.Enlem, s.Boylam}) 
    .Where(g => g.Count() > 1) 
    .SelectMany(g => g) 
    .ToList(); 
+0

Die Nützlichkeit dieses zusammengesetzten Schlüssels über anonyme Typen in 'GroupBy' kann nicht unterschätzt werden. Sie profitieren direkt von der automatischen Umsetzung der Gleichstellung. –

+0

Ich denke, es ist das gleiche, was ich oben geschrieben habe, aber ich möchte verschiedene Dinge, sorry dafür, ich habe meine Frage aktualisiert, können Sie es betrachten? – ertan2002

+0

Hey Es funktioniert wie ich will .. Vielen Dank .. – ertan2002

2

Sie können die Distinct() verwenden Linq Funktion jedoch, dass nur identische Elemente funktioniert. Wenn Sie eine DistinctBy() möchten, können Sie eine LinqExtensions-Klasse mit einer DistinctBy() -Methode erstellen.

Hier ist eine, die ich durchaus üblich:

/// <summary> 
///  Provides common extension methods on LINQ members. 
/// </summary> 
public static class LinqExtensions 
{ 
    #region Members 

    public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) 
    { 
     HashSet<TKey> seenKeys = new HashSet<TKey>(); 
     foreach (TSource element in source) 
     { 
      if (seenKeys.Add(keySelector(element))) 
      { 
       yield return element; 
      } 
     } 
    } 

    #endregion Members 
} 

Verwenden Sie es als:

var distinctList = konumlar.DistinctBy(x => x.property && x.property2 && ...); 

Mit freundlichen Grüßen

+0

danke es sieht gut aus, aber ich habe eine Ausnahme. Fehler Operator '&&' kann nicht auf Operanden vom Typ 'string' und 'string' angewendet werden .. ans zweite, ich habe meine Frage aktualisiert .. könnten Sie danach suchen? – ertan2002

1

Ich nehme an, das ist, was Sie wollen:

List<KonumBilgisi> distinctList = konumlar 
    .GroupBy(k => new { k.Enlem, k.Boylam }) 
    .SelectMany(x => x.GroupBy(k => k.Boylam).First()) 
    .ToList(); 

Sie wählen einzigartige Artikel acco Wenn Sie diese beiden Eigenschaften auswählen, wählen Sie eindeutige Elemente gemäß Boylam aus.

+0

Entschuldigung, ich habe meine Frage bearbeitet. Es ist falsch. – ertan2002

Verwandte Themen