將不確定變為確定~Linq-Distinct()方法是否可以對復雜結果集進行去重?


回到目錄

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()語句會生效

結果是正確的:

回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM