Ho due serie di dati (elenchi di oggetti complessi o dati SQL - LINQ a entità) dove sto cercando di trovare l'intersezione dei due insiemi di dati. Specificamente un'intersezione della proprietà Complesso, "HashData" come mostrato di seguito:Intersezione di due set (liste) di dati
Il set a sinistra è probabile che sia circa 10000 righe, mentre la serie destra è sempre un sottoinsieme di circa 100 filari. Mi rendo conto che se I sorta il set a sinistra da "Hashdata" quando lo si ripone, facendo una ricerca sarebbe un bel po 'più veloce utilizzando una sorta di algoritmo di ricerca binaria, tuttavia non posso fare questo per motivi non pertinenti alla domanda.
Il sottoinsieme di dati più piccolo non viene mai memorizzato in SQL (mostrato solo in una tabella SQL di seguito per scopi esplicativi). È presentato in un List<ShowData>
in fase di esecuzione.
Al momento sto facendo un ciclo patetico attraverso i dati e la congruenza come questo (dove recording
è la lista di 100 riga e ShowData
l'elenco 10000 riga):
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) {
}
}
}
Quindi, in pratica quello che im cercando da fare è:
Restituisce un elenco di oggetti ShowData (big set) in cui qualsiasi HashData (dal piccolo insieme) viene trovato in ShowData BUT all'interno della query iniziale LINQ su Entity sul DB.
mi sono avvicinato 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 , ho provato questo: 'public bool Equals (ShowData x, ShowData y) { // Controlla se gli oggetti confrontati fanno riferimento agli stessi dati. if (Object.ReferenceEquals (x, y)) restituisce true; // Controlla se uno qualsiasi degli oggetti confrontati è nullo. se (Object.ReferenceEquals (x, null) || Object.ReferenceEquals (y, null)) return false; // Controlla se le proprietà dei prodotti sono uguali. return x.HashData == y.HashData;} ' – user1112324
ma non sono sicuro di come si compila quando ottengo un errore: iEnumerable non contiene una definizione per Intersect –
user1112324
@ user1112324 - Sei sicuro di aver incluso un'istruzione 'using' per 'System.Linq' e ' System.Collections.Generic '? Intersect è sicuramente un metodo di estensione di IEnumerable. –