Cómo obtener duplicados por atributo con LINQ
Tengo mi clase HomeTeam
public class HomeTeam
{
public ID { get; set; }
public string codeTeam { get; set; }
public string codeNumber { get;set; }
}
Tengo mi lista de objetos:
var listaFiltrada = new List();
Quiero conseguir todos los artículos que tienen el mismo codeTeam y codeNumber parámetros.
Sample:
ID CodeTeam CodeNumber
1 B538 B2235
ID CodeTeam CodeNumber
2 B538 B2235
ID CodeTeam CodeNumber
3 B333 B235
Quiero volver lista de filtros Artículo con ID 1 y 2.
Pregunta hecha hace 3 años, 5 meses, 2 días - Por bytebarricade
4 Respuestas:
-
Supongo que las dos expresiones linq podrían combinarse en una pero creo que esto funciona
var teams = new List
() { 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); } Respondida el Dec 20, 2020 a las 21:29 - por progprophet
Votos positivos: 0 | Votos negativos: 0 -
esto devuelve una lista con listas de elementos duplicados
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();
Respondida el Dec 20, 2020 a las 21:34 - por codecatalyst
Votos positivos: 0 | Votos negativos: 0 -
Para obtener los duplicados por atributo en una lista de objetos utilizando LINQ en C
, puedes hacer lo siguiente:
- Utiliza el método `GroupBy()` de LINQ para agrupar los objetos por los atributos `codeTeam` y `codeNumber`.
- Luego, filtra los grupos que tengan más de un elemento, indicando que son duplicados.
- Finalmente, obtén los objetos duplicados de cada grupo y agrégalos a una nueva lista.
Aquí tienes un ejemplo de cómo hacerlo:
csharp using System; using System.Collections.Generic; using System.Linq; public class HomeTeam { public int ID { get; set; } public string codeTeam { get; set; } public string codeNumber { get; set; } } class Program { static void Main() { List
listaFiltrada = new List { new HomeTeam { ID = 1, codeTeam = "B538", codeNumber = "B2235" }, new HomeTeam { ID = 2, codeTeam = "B538", codeNumber = "B2235" }, new HomeTeam { ID = 3, codeTeam = "B333", codeNumber = "B235" } }; var duplicados = listaFiltrada .GroupBy(x => new { x.codeTeam, x.codeNumber }) .Where(g => g.Count() > 1) .SelectMany(g => g.Select(x => x)) .ToList(); foreach (var item in duplicados) { Console.WriteLine("ID: {0}, CodeTeam: {1}, CodeNumber: {2}", item.ID, item.codeTeam, item.codeNumber); } } } En este código, la variable
duplicados
contendrá los objetos duplicados por los atributoscodeTeam
ycodeNumber
. Luego, se imprime en consola la información de los objetos duplicados encontrados.Respondida el Dec 21, 2020 a las 21:30 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para obtener duplicados por atributos
codeTeam
ycodeNumber
usando LINQ, puedes utilizar el siguiente código:var listaFiltrada = listaHomeTeam .GroupBy(x => new { x.codeTeam, x.codeNumber }) .Where(g => g.Count() > 1) .SelectMany(g => g) .ToList();
Este código agrupa los elementos de
listaHomeTeam
por los atributoscodeTeam
ycodeNumber
. Luego, filtra los grupos que tienen más de un elemento (es decir, los duplicados). Finalmente, selecciona todos los elementos de los grupos filtrados, dándote una lista de elementos duplicados.En tu ejemplo, la lista
listaFiltrada
contendrá los elementos conID 1
yID 2
, ya que tienen los mismos valorescodeTeam
ycodeNumber
(B538 y B2235).Respondida el Dec 21, 2020 a las 21:42 - por Gemini
Votos positivos: 0 | Votos negativos: 0