2017-10-12 2 views
1

私がDBからレコードをプルする必要がありますを使用してDBとは別個のレコードを引く、のは、この構造を仮定しましょう2つの列

ID、名前、タイプ、キー、EXPDATE、のisActive

は今、いくつかの再構築が行われていましたIDとタイプに基づいてテーブルに重複レコードが保持される可能性があります。私はlinqを使用してDBからレコードを引き出すことができるようにしたいが、同じID /タイプを持つレコードのうちの1つだけを取り出したい。

EX:

1、フレッド、1、NewGuid、2019年12月15日、1

1、フレッド、1、NewGuid、2017年10月1日、1

2、 Goerge、2、NewGuid、02/01/2018、1

結果セットをFredの1レコード、Goergeの1レコードにします。 Fredのレコードのどれがただ一つしか返されないということは本当に重要ではありません。

DISTINCTを使用しようとしましたが、IDistinctが返され、レコード全体ではありません。 linqを使ってこれを行う方法はありますか?ここで

は、私が試したものです:

_table.AllReadOnly().Where(i => i.ID == id && i.IsActive).GroupBy(i => i.ID, i.Type).Select(i => i.FirstOrDefault()).ToList(); 
_table.AllReadOnly().Where(i => i.ID == id && i.IsActive).Distinct().ToList(); 

私は(.Distinctを知っている)ことは何もしませんように。私はEqualityComparerのやり方を考え出しましたが、それが私が行くべきルートかどうかは分かりません。

答えて

0

これら2つの列でGroupByを使用し、各グループから最初の要素を選択できます。例:

var list = new List<Table1>() 
{ 
    new Table1(){ Column1="x", Column2="y", Column3= "z"}, 
    new Table1(){ Column1="x", Column2="y", Column3= "t"}, 
    new Table1(){ Column1="a", Column2="b", Column3= "c"}, 
}; 

var resulut = list.GroupBy(x => new { C1 = x.Column1, C2 = x.Column2 }) 
        .Select(g => g.FirstOrDefault()); 

結果は、入力リストの1番目と3番目の要素を含むリストになります。

+0

ありがとうございました。私はそれがなぜ私がそれを持っていた方法対働いたのだろうか。鉱山はちょうどリストを返しました。 –

+0

ようこそ。あなたは、署名によってグループ内の結果セレクタとして 'i.Type'を渡しました。あなたはそれを必要としません。 –

関連する問題