उपयोग करें GroupBy
, लेकिन कृपया ध्यान दें कि GroupBy
आपको सभी कॉलमों के अनुसार समूह बनाना चाहिए क्योंकि यदि आप इसके द्वारा समूह Id
बनाते हैं तो हमेशा डुप्लिकेट आइटम नहीं निकालते हैं। उदाहरण के लिए निम्नलिखित उदाहरण पर विचार करें:
List<Item> a = new List<Item>
{
new Item {Id = 1, Name = "Item1", Code = "IT00001", Price = 100},
new Item {Id = 2, Name = "Item2", Code = "IT00002", Price = 200},
new Item {Id = 3, Name = "Item3", Code = "IT00003", Price = 150},
new Item {Id = 1, Name = "Item1", Code = "IT00001", Price = 100},
new Item {Id = 3, Name = "Item3", Code = "IT00003", Price = 150},
new Item {Id = 3, Name = "Item3", Code = "IT00004", Price = 250}
};
var distinctItems = a.GroupBy(x => x.Id).Select(y => y.First());
इस समूह के लिए परिणाम होगा:
{Id = 1, Name = "Item1", Code = "IT00001", Price = 100}
{Id = 2, Name = "Item2", Code = "IT00002", Price = 200}
{Id = 3, Name = "Item3", Code = "IT00003", Price = 150}
जो गलत है क्योंकि इसे {Id = 3, Name = "Item3", Code = "IT00004", Price = 250}
डुप्लिकेट माना जाता है। तो सही क्वेरी होगी:
var distinctItems = a.GroupBy(c => new { c.Id , c.Name , c.Code , c.Price})
.Select(c => c.First()).ToList();
3.Override Equal
और GetHashCode
आइटम वर्ग में:
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public int Price { get; set; }
public override bool Equals(object obj)
{
if (!(obj is Item))
return false;
Item p = (Item)obj;
return (p.Id == Id && p.Name == Name && p.Code == Code && p.Price == Price);
}
public override int GetHashCode()
{
return String.Format("{0}|{1}|{2}|{3}", Id, Name, Code, Price).GetHashCode();
}
}
तो आप इसे इस तरह से उपयोग कर सकते हैं:
var distinctItems = a.Distinct();