-1

I have my class HomeTeam

public class HomeTeam 
{
    public ID { get; set; }
    public string codeTeam { get; set; }
    public string codeNumber { get;set; }
}

I have my list of objects:

var listaFiltrada = new List<HomeTeam>();

I want get all items that have the same codeTeam and codeNumber parameters.

Sample:

ID     CodeTeam   CodeNumber
 1      B538       B2235
ID     CodeTeam   CodeNumber
 2      B538       B2235
ID     CodeTeam   CodeNumber
 3      B333       B235

I want filter list return Item with ID 1 and 2.

xanatos
  • 109,618
  • 12
  • 197
  • 280
joeyanthon
  • 208
  • 1
  • 2
  • 13
  • 2
    What have you tried so far? We're happy to help, but we won't do all the work for you – Andrew Williamson Dec 20 '20 at 21:46
  • This has an answer at https://stackoverflow.com/questions/18547354/c-sharp-linq-find-duplicates-in-list – admiralfeb Dec 20 '20 at 22:17
  • Does this answer your question? [C# LINQ find duplicates in List](https://stackoverflow.com/questions/18547354/c-sharp-linq-find-duplicates-in-list) – Andrew Williamson Dec 20 '20 at 22:24
  • @AndrewWilliamson - It's not a duplicate. This is about getting duplicates by multiple properties. The question you've linked to is similar, but might be misleading because of the how the duplicates are determined. – Enigmativity Dec 21 '20 at 00:03

2 Answers2

1

i suppose that the 2 linq expressions could be combined in one but i think this works

            var teams = new List<HomeTeam>()
            {
                new HomeTeam() {ID = 1, codeTeam = "B538", codeNumber = "B2235"},
                new HomeTeam() {ID = 2, codeTeam = "B538", codeNumber = "B2235"},
                new HomeTeam() {ID = 3, codeTeam = "B333", codeNumber = "B235"},
                new HomeTeam() {ID = 4, codeTeam = "B333", codeNumber = "B235"},
                new HomeTeam() {ID = 5, codeTeam = "B333", codeNumber = "B235"},
                new HomeTeam() {ID = 6, codeTeam = "B333", codeNumber = "B235333"},
                new HomeTeam() {ID = 7, codeTeam = "B3444433", codeNumber = "B23534433"}

            };

            var groupedData =
                (from t in teams
                    group t by new {t.codeTeam, t.codeNumber}
                    into grp
                    where grp.Count() > 1
                    select new
                    {
                        grp.Key.codeTeam,
                        grp.Key.codeNumber,
                        Count = grp.Count()
                    }).ToList();

            var ids = from team in teams
                join grp in groupedData on new {team.codeNumber, team.codeTeam} equals new
                    {grp.codeNumber, grp.codeTeam}
                select new
                {
                    ID = team.ID
                };

            foreach (var id in ids)
            {
                Console.WriteLine(id.ID);
            }
0

this gives back a list with lists of duplicate items

var dups = listaFiltrada.Select(list => new HomeTeam()
        {
            ID = list.ID,
            CodeTeam = list.CodeTeam,
            CodeNumber = list.CodeNumber
        }).GroupBy(x => new { x.CodeNumber, x.CodeTeam })
        .Where(x => x.Count() > 1).ToArray();