290 messaggi dal 08 luglio 2008
Ciao a tutti,

devo creare una query in linq che faccia quanto segue:

- data una lista composta da 2 campi numerici, estrarre l'oggetto che rispetta più di una determinata condizione per uno stesso campo.

Un esempio, questa è la mia lista:
Campo A          Campo B
1                   3
1                   5
1                   9
2                   2
2                   9
3                   5
3                   9

Io vorrei estrarre il valore di campo a che contiene nel campo b sia il 3, sia il 5, sia il 9 (deve restituirmi quindi il valore 1)

grazie mille a tutti
Modificato da webbondo il 20 luglio 2014 07.45 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
prova così:
//definisco la lista di valori ammessi per CampoB
var valori = new int[] { 3, 5, 9 };
var numeroValori = valori.Length;

var query = from entità in context.NomeSet
            where valori.Contains(entità.CampoB)
            group entità by entità.CampoA into gruppo
            where gruppo.Count() == numeroValori
            select gruppo.Key;

In pratica, selezioni solo i record che contengono i valori desiderati per campoB, dopodiché li raggruppi per campoA e conti quanti record sono stati trovati in quel gruppo. Se sono tanti quanti i valori, allora vuol dire che rispetta il tuo criterio.

Attenzione: la query funzionerà solo se la tabella non ammette duplicati per la coppia CampoA e CampoB.
Inoltre, questa query restituirà tutti i valori di CampoA a cui sono associati esattamente almeno i tre valori 3, 5 e 9.
Ultima cosa: nella query ho usato il metodo Contains, che ti dà buone prestazioni se usi EF6 con Sql Server.

ciao,
Moreno
Modificato da BrightSoul il 21 luglio 2014 22.58 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.