25

LINQと同等のものは何ですか

Select DISTINCT A, B, C from TESTDB WHERE ALPHA =1

私はこのようなことを試みています:

var data = TESTDB.WHERE(i=>i.ALPHA==1).SELECT(A,B,C).DISTINCT();
4

3 に答える 3

28

匿名オブジェクトを使用すると、次のようなトリックが実行されます。

var data = TESTDB.Where(i => i.ALPHA == 1).Select(i => new {i.A, i.B, i.C}).Distinct();

モデルを保持するには:

List<Book> books = db.Book.Select(i => new Book {Author = i.Author, Title = i.Title}).Distinct().ToList();
于 2012-08-06T22:32:45.057 に答える
12

また、試すことができます

db.Table
  .OrderBy(m=>m.Name)
  .DistinctBy(m=> new{m.SerialNumber, m.Manufacturer})
  .ToList();
于 2014-06-13T23:29:40.713 に答える
1

そのように使用する場合:

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();
于 2012-08-06T21:47:25.563 に答える