Cuando tengo 2 objetos List<string>
, entonces puedo usar Intersect
y Except
en ellos directamente para obtener una salida IEnumerable<string>
. Eso es bastante simple, pero ¿y si quiero que la intersección/disyunción en algo más complejo?Uso de LINQ para objetos Intersecar y Excepto en una propiedad específica
ejemplo, tratando de obtener una colección de objetos ClassA
que es el resultado de la intersecan en ClassA
de AStr1
objeto y el objeto de ClassB
BStr
; :
public class ClassA {
public string AStr1 { get; set; }
public string AStr2 { get; set; }
public int AInt { get; set; }
}
public class ClassB {
public string BStr { get; set; }
public int BInt { get; set; }
}
public class Whatever {
public void xyz(List<ClassA> aObj, List<ClassB> bObj) {
// *** this line is horribly incorrect ***
IEnumberable<ClassA> result =
aObj.Intersect(bObj).Where(a, b => a.AStr1 == b.BStr);
}
}
Cómo puedo reparar la línea indicada para lograr esta intersección.
Hola @ Jon Skeet, no entiendo cómo puedo pasar el cuarto parámetro. ¿Defino una clase implementando IEqualityComparer y luego paso una instancia de esta clase? – corei11
@ corei11: Sí, si necesita algo personalizado, o use 'EqualityComparer .Default' si está contento con la operación de igualdad predeterminada. –
Gracias @Jon Skeet. Aquí tengo dos 'IEnumerable owner1' y' owner2'. Y defino una clase llamada 'Compar' implementando' IEqualityComparer'. Ahora llame al método de esta manera 'owner1 = owner1.IntersectBy (owner2, item => item.Email_Address, new Compar())'. En realidad, quiero aclarar cómo pasar mi clase Compar. ¿Eso es directamente yo escribo una cuerda o hay otra manera mejor o mi enfoque está bien? El prototipo de mi clase Compar es 'clase pública Compar : IEqualityComparer '. Lo siento. Puede ser una pregunta tonta. Gracias. –
corei11