Domanda

Ho cercato di trovare una risposta a questo, ma non ho trovato uno in google. Probabilmente non cercare i termini corretti, così ho pensato chiedere qui.

I seguenti restituisce tutti i miei contatti, non quelli che la parità l'adjusterType inviato.

var contacts = from c in session.Linq<Contact>() select c;
contacts.Where(c => c.ContactAdjuster.AdjusterType == adjusterType);

Il seguente non restituire i risultati attesi. Si fa ritorno solo i contatti che soddisfano l'adjusterType. Credo che sia la mia mancanza di comprensione di LINQ.

var contacts = from c in session.Linq<Contact>() select c;
contacts  = contacts.Where(c => c.ContactAdjuster.AdjusterType == adjusterType);

Grazie in anticipo.

È stato utile?

Soluzione

clausola Where restituisce un IEnumerable nel tuo caso un IEnumerable. Questo è il LINQ e C # comportamento standard. Invece di modificare la vostra collezione si sta tornando una nuova collezione in base alla clausola where.

Credo che NHibernate LINQ dovrebbe imitare questa.

Altri suggerimenti

Catz ha assolutamente ragione, non si sta modificando la collezione "contatti" / enumerabile si sta creando una nuova sulla base del già esistente, che è il motivo per cui la tua seconda affermazione funziona.

Ma invece di ripetere dichiarazione Catz, ecco un piccolo add-on:

È possibile scrivere questo in una dichiarazione se

var contacts = 
    from c in session.Linq<Contact>() 
    where c.ContactAdjuster.AdjusterType == adjusterType
    select c;

O semplicemente

var contacts = session.Linq<Contact>().Where(c => c.ContactAdjuster.AdjusterType == adjusterType);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top