2012-02-10 13 views
5

同じ列値を共有するDataGridにこれらの行を表示しようとしています。LINQ:列の値によって重複する行を選択する

は、例えば、同じ姓を持つ人のために、私はこれを試してみました:

私のWPFのDataGridには、このコマンドの後の行が含まれていますので、これは、一見働く
dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => grp.Key); 

...結局それが唯一の空の行を表示し、列に値が入力されていないためです。

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.City).Where(grp => grp.Count() > 1).Select(grp => grp.Key).Select(a => a); 

はこれを行うための任意の適切な方法があります:

または私は同じ都市を持っている人、でこれを試してみましたか?あなただけのあなたの例では、キーを選択している

+0

質問が不明です。明確にするために、最初のコードサンプルは機能しますが、2番目のサンプルは機能しません。 – Bryan

+0

最初のものは空の行だけを返します(しかし、少なくともいくつかは返します...).2番目のものは何も返しません。 – SeToY

+1

これは、データベース内のSurNameの空白値を持つ複数の行を持つことを意味します?両方がうまくいっているように見えますが、あなたが期待するデータを返さないだけです。それは 'Address'と' Person'のクラス定義を見るのに役立ちます – Bryan

答えて

9

:姓と名を比較するために

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

:私はあなたがやろうとしていると仮定何

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => **grp.Key**); 

は、行全体を選択することです:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new Tuple<String, String>(a.ForeName, a.SurName)).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

EDIT:L2Eについて、あなたは(私が思う)匿名型を使用することができます。

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new { a.ForeName, a.SurName }).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

上記は正しくない可能性があります。

+0

ありがとう、私はこれが働くと信じています... SurNamesを比較するだけでなく、ForeNamesも比較するためにどのようにクエリを修正すべきですか? .GroupBy(a => a.ForeName、a.SurName)は機能しません。 – SeToY

+0

「あなたの名前と姓に一致する行を表示する」という意味ですか?私の編集を参照してください。 –

+0

はい、FirstNameとLastNameが等しい行 – SeToY

関連する問題