ব্যবহার করুন 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. ওভাররাইড 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();