Подтвердить что ты не робот

Различия в структуре Entity Framework нескольких столбцов LINQ

Что такое эквивалент LINQ

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

Я пробую что-то вроде этого:

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

Ответ 1

Использование анонимных объектов сделает трюк:

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

Ответ 2

Вы также можете попробовать

db.Table
  .OrderBy(m=>m.Name)
  .DistinctBy(m=> new{m.SerialNumber, m.Manufacturer})
  .ToList();

Ответ 3

Если вы используете его так:

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 различает экземпляры (хотя все свойства имеют одинаковые значения, они три экземпляра).

Вы должны реализовать пользовательский сопоставитель, здесь вы найдете пример кода: http://msdn.microsoft.com/en-us/library/bb338049.aspx.

Но я не уверен, почему вы хотите выбрать три свойства (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();