artanis ha scritto:
é possibile fare un EqualityComparer con 2 oggetti differenti ?
ciao, purtroppo no. La definizione di Except contempla solo un tipo quindi, volendo usare questo sistema, sei obbligato a proiettare il secondo tipo sul primo usando il metodo .Select. Cioè, potresti fare:
var query = listaObj1.Except(listaObj2.Select(obj2 => new Obj1 { CodiceCliente = obj2.CODCLIUTE }), new TuoComparer());
...ma non è che mi piaccia molto come soluzione quella di istanziare tanti Obj1 al solo fine di ottenere una corrispondenza di tipo. Così mi sembra di voler usare .Except a tutti i costi, anche se non è idoneo a questo caso specifico.
Invece potresti scrivere un tuo extension method .Except che supporti due tipi. Si rivelerebbe utile se la tua applicazione ne dovesse fare un utilizzo abbastanza frequente.
In alternativa, la soluzione più semplice è questa query, che simula il comportamento di Except.
var query = from obj1 in listaObj1
where !listaObj2.Any(obj2=>obj2.CODCLIUTE == obj1.CodiceCliente)
select obj1;
In questo modo seleziono solo quei obj1 il cui CodiceCliente non corrisponde ad alcun CODCLIUTE nella lista2.
Ho usato il metodo .Any che restituisce un valore booleano che mi dice, appunto, se è stato trovato un qualsiasi elemento rispondente al predicato che è stato passato come parametro.
ciao,
Modificato da BrightSoul il 25 ottobre 2011 21.51 -