當前位置:
首頁 > 知識 > EF之通過不同條件查找去重複

EF之通過不同條件查找去重複


Enumerable.Distinct Method(IEnumerable, IEqualityComparer)

也就是使用的Distinct(參數1,參數2);

參數1為原數據,參數2為比較數據

通過IEqualityComparer來比較值從而返回不同的序列。

引用的名稱空間:System.Linq

程序集:System.Core (在 System.Core.dll下)

語法:

public static IEnumerable Distinct(
this IEnumerable source,
IEqualityComparer comparer
)

參數:

原數據:

類型:System.Collections.Generic.IEnumerable
指的是從中刪除重複元素的序列

比較數據:

類型 : System.Collections.Generic.IEqualityComparer
這個是與原數據的比較值

返回數據:

類型: System.Collections.Generic.IEnumerable
返回原數據中不重複的序列

當給的參數為空時拋出的異常:

備註:

該方法通過使用延遲執行來實現。 立即返回值是存儲執行操作所需的所有信息的對象。 通過直接調用其GetEnumerator方法或在Visual C#或Visual Basic中使用foreach進行枚舉,直到對象被枚舉為止,才執行此方法所表示的查詢。不同的(IEnumerable ,IEqualityComparer )方法返回一個無序的序列,不包含重複的值。 如果comparer為null,則使用默認的等式比較器Default來比較值。

示例:

以下示例顯示如何實現可在Distinct 方法中使用的等式比較器。

public class Product
{
public string Name { get; set; }
public int Code { get; set; }
}

// 產品類的自定義比較器
class ProductComparer : IEqualityComparer
{
// 如果產品的名稱和產品編號相同,則產品相同
public bool Equals(Product x, Product y)
{

//檢查比較對象是否引用相同的數據
if (Object.ReferenceEquals(x, y)) return true;

//檢查所比較的對象是否為空
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;

//檢查產品的屬性是否相等
return x.Code == y.Code && x.Name == y.Name;
}

// 如果Equals對一對對象返回true
// 那麼GetHashCode必須為這些對象返回相同的值。那麼GetHashCode必須為這些對象返回相同的值。

public int GetHashCode(Product product)
{
//檢查該對象是否為空
if (Object.ReferenceEquals(product, null)) return 0;

//如果它不為空,獲取名稱欄位的

hashCode

int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode; //獲取代碼欄位的hashCode int hashProductCode = product.Code.GetHashCode; //計算產品的hashCode return hashProductName ^ hashProductCode; } }

實現此比較器後,可以使用Distinct 方法中的一系列Product對象,如以下示例所示。

Product products = { new Product { Name = "apple", Code = 9 },
new Product { Name = "orange", Code = 4 },
new Product { Name = "apple", Code = 9 },
new Product { Name = "lemon", Code = 12 } };

//排除重複

IEnumerable noduplicates =
products.Distinct(new ProductComparer);

foreach (var product in noduplicates)
Console.WriteLine(product.Name + " " + product.Code);

/*
返回的值如下:
apple 9
orange 4
lemon 12
*/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

TAG:科技優家 |

您可能感興趣

若這4個條件「不理想」,夫妻想生二胎要慎重,以免將來後悔
重複重複再重複,直到形成條件反射
家裡條件再差,孕婦這2項檢查也不能不做,對胎寶太重要了
不想婚後矛盾重重,這3個條件得先考察好,否則易嫁錯人
硬體條件不過關,申請季末如何拿下名校OFFER
對不起,你不符合這些院校的提前面試申請條件
想要條件好,又坐懷不亂的人可以找到,但同時要匹配同樣的條件
同樣條件人辦理簽證,不同地方結果卻差這麼多
只要滿足這3個條件,不離婚也可以直接撤銷婚姻,相當於沒結過
想閉關,必須具備這幾個條件
印度準備重返FGFA項目 可提出的條件俄羅斯會答應嗎?
這3項產檢,不符合條件只是浪費錢,不是所有孕婦都需要檢查
離婚男人,不具備這四個條件,很難再找到另一半
不止一次的聽人說:對方條件還不錯,那就結婚吧
條件再不好,在孩子的這幾件事上也要捨得
不管在哪裡上班,如果你不具備這個條件,BAT背景也救不了你!
決定離婚的時候,你肯定是考慮好了這四個條件,不然就輕易不要離
很多人不是不想結婚,而是完全沒條件結婚,結不起婚!
搞笑GIF:結婚也可以,家裡就這條件
二胎家庭經驗之談:不想悲劇重演,滿足不了這3個條件別生二胎