Ответ 1
Использование анонимных объектов сделает трюк:
var data = TESTDB.Where(i => i.ALPHA == 1).Select(i => new {i.A, i.B, i.C}).Distinct();
Что такое эквивалент 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 различает экземпляры (хотя все свойства имеют одинаковые значения, они три экземпляра).
Вы должны реализовать пользовательский сопоставитель, здесь вы найдете пример кода: 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();