2013-12-13 16 views
5

私はリスト個別リストをカスタムリストから取得する方法は?

リストkonumlarを持ってここに私のクラス..

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; } 

} 

をC#のフレームワーク3.5を使用しています。うまく

、私は彼らのenlemとboylam変数に互いに等しいアイテムを取得したい。..

あなたは

enter image description here

下の写真に見るように、私はenlemとboylamをcompateしたいとその同等のものを別のリストに入れたいのであれば...

私はループでこれを行うことができますが、LINQを使用したいと思います。私はGROUPBYを使用しますが、それは間違っているdoesntの..

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

EDIT 実は私はよく私のquesionを説明couldntの..

多分に異なるが、右の単語ではありません..私はそれぞれに等しくされている項目を区切るしたいです以下のような他の..

:私は1つのリスト にペンディクのアイテムを取ると、他の人がkonumlarが、ペンディク項目になります

がkonumlから削除されますARリスト

EDIT 2

私はそのようなリストを区切るしたいオーケー

enter image description here

enter image description here

+0

等しいか異なる商品を抽出したいですか? –

+0

リストからも抜粋し、また除外しています。私はそれらをお互いに分けたいと思っています。 – ertan2002

+0

希望の結果を表示すると助けになります。 2番目のリストに言及していますが、表示していません。 –

答えて

4
あなたは、ほとんど存在し

- むしろ、二つの別々のGroupBy呼び出しを使用するよりも、 1つを使用し、2つの部分からなるキーを使用します。

var distinctList = konumlar 
    .GroupBy(s => new {s.Enlem, s.Boylam}) 
    .Select(g => g.First()) 
    .ToList(); 

EDIT:次のようにクエリを変更、すべての項目に重複して除くものを取得するには:

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(); 

上記は、あなたに「ペンディク」ものを除くすべての項目を提供します。唯一の同一の項目に動作している、あなたはしかし、明確な()LINQの機能を使用することができます

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

'GroupBy'の匿名型による複合キーの有用性は、控えめにすることはできません。あなたは、平等の自動実装から直接利益を得ます。 –

+0

私はそれが私が上に書いたものと同じだと思うが、私は別のものが欲しい、申し訳ありません、私は私の質問を更新しました。 – ertan2002

+0

こんにちはそれは私がしたいように動作します..非常にありがとう.. – ertan2002

2

:唯一の「ペンディク」Sを取得するには、以下のクエリを使用します。 DistinctBy()が必要な場合は、DistinctBy()メソッドを使用してLinqExtensionsクラスを作成できます。

ここで私はかなり一般的に使用され一つだ:私はこれがあなたが望むものであると仮定し

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

種類が

+0

それはいいように見えますが、私は例外があります。エラー演算子 '&&'は 'string'と 'string'型のオペランドに適用できません..もう一つは、私の質問を更新しました。 – ertan2002

1

について:

/// <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 
} 

としてそれを使用し

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

ユニークなアイテムを選択これらの2つのプロパティを設定してから、Boylamに従ってユニークな項目を選択します。

+0

申し訳ありませんが、私は私の質問を編集しました。それは私の間違っている.. – ertan2002

関連する問題