LINQと同等のものは何ですか
Select DISTINCT A, B, C from TESTDB WHERE ALPHA =1
私はこのようなことを試みています:
var data = TESTDB.WHERE(i=>i.ALPHA==1).SELECT(A,B,C).DISTINCT();
匿名オブジェクトを使用すると、次のトリックが実行されます。
var data = TESTDB.Where(i => i.ALPHA == 1).Select(i => new {i.A, i.B, i.C}).Distinct();
あなたも試すことができます
db.Table
.OrderBy(m=>m.Name)
.DistinctBy(m=> new{m.SerialNumber, m.Manufacturer})
.ToList();
あなたがそのようにそれを使うならば:
var list = new List<Pet>()
{
new Cat() {Name = "Kitty", Id = 1},
new Cat() {Name = "Kitty", Id = 1},
new Cat() {Name = "Kitty", Id = 1}
};
var distinctCount = list.Where(i => i.Id == 1).Distinct().Count();
結局、distinctCountは3に等しいことがわかります。それはなぜですか?デフォルトでは、Distinctはインスタンスを区別しているようです(すべてのプロパティの値が同じであっても、3つのインスタンスです)。
カスタム比較ツールを実装する必要があります。ここにコード例があります: http://msdn.Microsoft.com/en-us/library/bb338049.aspx 。
しかし、なぜ3つのプロパティ(A、B、C)を選択するのかわかりません。次の方法で単一のプロパティにアクセスできます。
var data = list.Where(i => i.Id == 1).Distinct().SelectMany(i => i.Name);
ただし、複数のプロパティを選択するには、オブジェクト全体をそれらのプロパティを含むクラスにキャストする必要があります。
var data = list.Where(i => i.Id == 1).Cast<Pet>().Distinct().ToList();