linq中也有像T—SQL的distinct方法,可以將重復的結果集去重,以下是我們使用 distinct()時需要注意的地方:
1 distinct去重記錄要求每個字段都重復時,才算重復對象,這與T—SQL保持一至
2 disinct語句與orderby語句可以放在一起使用,對彼此不產生影響
3 distinct是在數據庫端進行的操作,即,你在linq中的distinct與T-SQL的distinct效果一樣,不會產生性能問題
4 distinct的數據集中不能有復雜對象,如果出現List<T>這種引用類型,那LINQ在解釋成T—SQL時,將會把distinct()去掉,從而使去重操作失效
實例:
1 DataClasses1DataContext db = new DataClasses1DataContext(); 2 var linq = from _data in db.Res_Item 3 join data2 in db.Res_ItemCategory on _data.ID equals data2.ItemID 4 join data3 in db.Res_ItemPrice on _data.ID equals data3.ItemID into list 5 select new Res_Item_Ext 6 { 7 ID = _data.ID, //列說明: 產品編號 8 Name = _data.Name, //列說明: 商品名稱 9 Res_ItemPrice=list.ToList(), 10 }; 11 var linq2 = linq.Where(i => i.ID == 5104).OrderBy(i => i.ID).Distinct().ToList(); 12 linq2.ForEach(i => Console.WriteLine(i.ID + i.Name));
由於在結果集中出現List<T>這種復雜類型,所以distinct()操作失效,如圖:
如果在結果集中沒有復雜類型Res_ItemPrice屬性,那distinct()語句會生效
結果是正確的: