Tengo dos conjuntos de datos (Listas de objetos complejos o datos SQL - LINQ to Entities) en los que trato de encontrar la intersección de los dos conjuntos de datos. Específicamente una intersección de la propiedad Complex "HashData" como se ve a continuación:Intersección de dos conjuntos (Listas) de datos
es probable que sea alrededor de 10.000 filas El conjunto de la izquierda, mientras que el conjunto de la derecha es siempre un subconjunto de aproximadamente 100 filas Me doy cuenta de que si clasifico el conjunto de la izquierda por "Hashdata" al almacenarlo, hacer una búsqueda sería mucho más rápido usando algún tipo de algoritmo de búsqueda Binario, sin embargo, no puedo hacer esto por razones no pertinentes a la pregunta.
El subconjunto más pequeño de datos nunca se almacena en SQL (solo se muestra en una tabla SQL a continuación con fines explicativos). Se presenta en un List<ShowData>
en tiempo de ejecución.
En el momento que estoy haciendo un bucle patética a través de los datos y el juego del modo siguiente (recording
es la Lista 100 de fila y ShowData
es la Lista 10000 fila):
List<ShowData> ShowData = (from showData in context.ShowDatas
where (showData.Show.Id == advert.Id)
orderby showData.HashData ascending
select showData).ToList();
foreach (ShowData recording in recordingPoints) {
foreach (ShowData actual in ShowData) {
if (recording.HashData == actual.HashData) {
}
}
}
Así que básicamente lo que estoy tratando hacer es:
Devuelve una lista de objetos ShowData (conjunto grande) donde cualquier HashData (del conjunto pequeño) se encuentra en ShowData PERO dentro de la consulta inicial de LINQ to Entity al DB.
yo nos acercamos con:
private IEnumerable<ShowData> xyz(List<ShowData> aObj, List<ShowData> bObj)
{
IEnumerable<string> bStrs = bObj.Select(b => b.HashData).Distinct();
return aObj.Join(bStrs, a => a.HashData, b => b, (a, b) => a);
}
hi Josh , intenté esto: 'public bool Equals (ShowData x, ShowData y) { // Compruebe si los objetos comparados hacen referencia a los mismos datos. if (Object.ReferenceEquals (x, y)) return true; // Compruebe si alguno de los objetos comparados es nulo. if (Object.ReferenceEquals (x, null) || Object.ReferenceEquals (y, null)) return false; // Compruebe si las propiedades de los productos son iguales. return x.HashData == y.HashData; } ' – user1112324
pero no estoy seguro de cómo se compila esto a medida que obtengo un error: iEnumerable no contiene una definición para Intersecar –
user1112324
@ user1112324 - ¿Estás seguro de que has incluido una instrucción 'using' para 'System.Linq' y ' System.Collections.Generic '? Intersecar es sin duda un método de extensión de IEnumerable. –