2012-06-25 24 views
5

Los nombres y tipos de columnas son idénticos, sin embargo, provienen de dos entidades separadas. Aquí está un ejemplo simplificado:Unir dos variables IQueryable de diferentes tipos utilizando LINQ

--Query View 
var v_res = from s in db.V_CMUCUSTOMER 
      select s; 

--Values from table less values from view 
var res = from s in db.CMUCUSTOMERs 
      where !(from v in v_res 
      select v.ID).Contains(s.ID) 
     select s; 

--join table and view values into one variable 
var res_v_res = (from c in res 
      select c).Union(from v in v_res 
      select v); 

me sale el siguiente error sin embargo:

argumento Instancia: no se puede convertir de 'System.Linq.IQueryable' a System.Linq.ParallelQuery

+2

Apuesto a que si deja de usar 'var', la respuesta sería clara. Al dejar que el compilador elija el tipo de v_res y res, puede vivir con sus elecciones. –

+1

por favor, elabore. – stats101

+0

El compilador puede elegir un tipo inesperado para una de esas variables, luego puede elegir entre diferentes implementaciones de Unión basadas en esa elección (System.Linq.Enumerable.Union, System.Linq.Queryable.Union para nombrar dos de las posibilidades) . En cambio, si especifica el tipo, el compilador le dirá cuándo pide lo imposible. –

Respuesta

0

Si especifica un nuevo tipo anónimo y utilizar ToList() para ambos, entonces debería ser capaz de Unión de la siguiente manera:

var v_res = (from s in db.V_CMUCUSTOMER 
      select new { custName = s.customer_name custAddress = s.address}).ToList(); 

--Values from table less values from view 
var res = (from s in db.CMUCUSTOMERs 
      where !(from v in v_res 
      select v.ID).Contains(s.ID) 
      select new { custName = s.customer_name custAddress = s.address }).ToList(); 

--join table and view values into one variable 
var res_v_res = v_res.Union(res); 

Esto puede ser onerosa si hay decenas de columnas, pero aún debe trabajar .

0

Cuando corro una consulta similar en LINQPad, aparece un mensaje de error que dice que s en Contains(s.ID) no está definido en este contexto.

Si reemplazo && con where todas las consultas se ejecutan con éxito.

Cuestiones relacionadas