C # Linq Buscar duplicados con múltiples grupos por
Tengo una lista en c # como:
List<Data> uData = new List<uData>();
Donde uData se rellena desde la interfaz de usuario como:
{
Id: 1,
Name: "Smith",
Input: "7,8",
Output: "Output1",
CreatedBy: "swallac",
CreatedON: "12/01/2018"
},
{
Id: 2,
Name: "Austin",
Input: "9,10",
Output: "Output1",
CreatedBy: "amanda",
CreatedON: "12/03/2018"
},
{
Id: 3,
Name: "Smith",
Input: "22,22",
Output: "Output2",
CreatedBy: "swallac",
CreatedON: "12/01/2018"
},
{
Id: 4,
Name: "Smith",
Input: "9,8",
Output: "Output2",
CreatedBy: "aaa",
CreatedON: "12/01/2018"
},
{
Id: 5,
Name: "Peter",
Input: "7,8",
Output: "Output3",
CreatedBy: "swallac",
CreatedON: "12/02/2018"
}
o que quiero hacer es buscar esta lista en la tecla "Salida" y averiguar si hay duplicados en el valor de combinación correspondiente de la tecla "Entrada" y Creado por.
Por ejemplo, en mi lista de ejemplos anterior tengo tres salidas: Salida1, Salida2, Salida3. Ahora, para las listas con la clave del valor de Salida como "Salida1" y "Salida3", el valor de clave correspondiente "Entrada" y "Creado por" se duplica aquí. El valor es "7,8" y "swallac" como valor combinado. Esto es lo que quiero destacar
Para esto probé la siguiente consulta:
var myList = uData.GroupBy(l => l.Ouput)
.SelectMany(g => g.GroupBy(x => (x.Input, x.CreatedBy)).Where(x => x.Count() > 1))
.SelectMany(x => x);
Esto no me da ningún error, pero no me da el resultado deseado, ya que enumera todos los datos. Que me estoy perdiendo aqui
--Actualizado--
nteriormente, quería que la entrada no se repitiera en una salida debido a lo cual tuve la siguiente consulta.
uData.GroupBy(l => l.Ouput)
.Any(g => g.GroupBy(x => x.Input).Any(x => x.Count() > 1))
Ahora quiero que otra consulta verifique si la combinación de Input y CreatedBy se repite en la lista.
Intenté la consulta publicada anterior y la consulta siguiente según la sugerencia:
uData.GroupBy(g=> new {g.CreatedBy,g.Input})
.Where(w=>w.Count() > 1)
Pero esto me devuelve toda la lista en lugar del duplicado
Actualizado para agregar un enlace de ejemplo:
https: //dotnetfiddle.net/HWMYp
He creado el ejemplo en el enlace anterior.
En el ejemplo, quiero marcar el conjunto con id 10 con salida (output5) como el duplicado como tal combinación de entrada y creado por ya existía antes en id 1,2,3 (todos los cuales pertenecen a output1). Entonces, básicamente, una combinación de input y createby no debe repetirse en otro conjunto. La clave de referencia es Salida. Lo siento si mi publicación inicial no fue muy clara. Lo intenté