什么是 LINQ 等效项
Select DISTINCT A, B, C from TESTDB WHERE ALPHA =1
我正在尝试这样的事情:
var data = TESTDB.WHERE(i=>i.ALPHA==1).SELECT(A,B,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();
要保留模型:
List<Book> books = db.Book.Select(i => new Book {Author = i.Author, Title = i.Title}).Distinct().ToList();
你也可以试试
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();