using System.Collections.Generic;
public static void Main()
List<StoreDetailDto> items = new List<StoreDetailDto>();
items.Add(new StoreDetailDto { StoreNumber = 2, WarehouseNumber = 4201, IsResolved = false, StoreName = "StoreEx", WarehouseName = "WarehouseEx1" });
items.Add(new StoreDetailDto { StoreNumber = 3, WarehouseNumber = 4201, IsResolved = false , StoreName = "StoreEx", WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 6, WarehouseNumber = 4201, IsResolved = false, StoreName = "StoreEx" , WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 7, WarehouseNumber = 4201, IsResolved = false , StoreName = "StoreEx", WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 9, WarehouseNumber = 4201, IsResolved = false , StoreName = "StoreEx", WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 6, WarehouseNumber = 4202, IsResolved = true, StoreName = "StoreEx", WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 7, WarehouseNumber = 4201, IsResolved = false, StoreName = "StoreEx" , WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 8, WarehouseNumber = 4201, IsResolved = false, StoreName = "StoreEx" , WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 8, WarehouseNumber = 4201, IsResolved = false, StoreName = "StoreEx" , WarehouseName = "WarehouseEx1"});
items.Add(new StoreDetailDto { StoreNumber = 9, WarehouseNumber = 4203, IsResolved = false, StoreName = "StoreEx", WarehouseName = "WarehouseEx1" });
items.Add(new StoreDetailDto { StoreNumber = 9, WarehouseNumber = 4207, IsResolved = true , StoreName = "StoreEx", WarehouseName = "WarehouseEx1"});
items.GroupBy(store => store.StoreNumber)
.Where(stores => stores.Count() > 1 && stores.Select(w => w.WarehouseNumber).Distinct().Count() == 1)
.SelectMany(stores => stores).Select(str=>str.StoreNumber).Distinct().ToList();
var OverlapStoreToBeRemoved =
items.GroupBy(store => store.StoreNumber)
.Where(stores => stores.Count() > 1)
.SelectMany(stores => stores).Select(str=>str.StoreNumber).Distinct().ToList();
items.GroupBy(store => store.StoreNumber)
.Select(grp => grp.Where(store => store.IsResolved == false))
.Where(store => store.Count() > 1 && store.Select(w => w.WarehouseNumber).Distinct().Count() > 1)
.SelectMany(stores => stores).ToList();
Console.WriteLine("\nDuplicate only stores list \n");
foreach (var store in Duplicates)
Console.WriteLine(store);
Console.WriteLine("\nOverlap/Duplicate by store \n");
foreach (var store in OverlapStoreToBeRemoved)
Console.WriteLine(store);
Console.WriteLine("\n Overlapping stores with detail \n");
foreach (var store in Overlapping)
Console.WriteLine(store.StoreNumber + " " + store.WarehouseNumber + " " + store.IsResolved + " " + store.StoreName + " " + store.WarehouseName);
public class StoreDetailDto
public int StoreNumber {get;set;}
public int WarehouseNumber {get;set;}
public bool IsResolved {get;set;}
public string StoreName {get;set;}
public string WarehouseName {get;set;}