2013-05-21 84 views
0

我有這個LINQ查詢左加入LINQ不工作

var x = (from d in detalle 
from n in nlj.DefaultIfEmpty() 
join nd in nuevodetalle 
on new { d.ope_idsku ,d.ope_tipo } equals new {nd.ope_idsku ,nd.ope_tipo }into nlj 
from n in nlj.DefaultIfEmpty() 


select new { d, n }).ToList(); 

現在如果我去做了

x[0].d==null this return false 
x[0].n==null this return false 
x[1].d==null this return false 
x[1].n==null this fails, why? 

我真正的選擇是不是{d,N}是

select new ope_detalle_autoventa() 
{ 
CreatedOn = d.CreatedOn, 
ModifiedOn = d.ModifiedOn, 
ope_autoventaid = d.ope_autoventaid, 
ope_Codope = d.ope_Codope, 
ope_detalle_autoventaId = (tiene_nuevo_primarykey) ? Guid.NewGuid() : d.ope_detalle_autoventaId, 
ope_entregado = (d.ope_entregado - (n != null ? n.ope_entregado : 0)), 
ope_envase = d.ope_envase, 
ope_estado = d.ope_estado, 
ope_icono = d.ope_icono, 
ope_idsku = d.ope_idsku, 
ope_name = d.ope_name, 
ope_pedido = d.ope_pedido, 
ope_precioV = d.ope_precioV, 
ope_prestamo = d.ope_prestamo, 
ope_promocion = d.ope_promocion, 
ope_skuid = d.ope_skuid, 
ope_tipo = d.ope_tipo, 
ope_autoventaidTarget = d.ope_autoventaidTarget, 
ope_skuidTarget = d.ope_skuidTarget, 
Ope_NumVenta = d.Ope_NumVenta, 
ope_descuento = d.ope_descuento, 
ope_cancelado = d.ope_cancelado, 
ope_folio = d.ope_folio, 
ope_cantcanc = 0, 
ope_estimado = "0" 
} 

但這得到失敗原因相同x[1].n==null失敗,(我相信), 我相信這在這一行失敗

ope_entregado = (d.ope_entregado - (n != null ? n.ope_entregado : 0)), 

然而 此查詢不會失敗

var restaragregados = (from r in resultadoregresar 
group new { r.ope_entregado } by new { r.ope_idsku } into agrupacion 
select new { agrupacion.Key.ope_idsku, entregadototal=(agrupacion.Sum (x=> x.ope_entregado)) } 
); 
List<ope_detalle_autoventa> nuevodetalle = (from d in detalle 
join c in cargainventario 
on d.ope_idsku equals c.ope_idsku into clj 
from c in clj.DefaultIfEmpty() 
join r in restaragregados on 
d.ope_idsku equals r.ope_idsku into rlj 
from r in rlj.DefaultIfEmpty() 
where (c!=null?c.ope_carga == cargausada:c==null ) 
&& (d.ope_entregado > ((c==null ?0:c.ope_disponibles) - (r==null?0:r.entregadototal))) 
&& d.ope_tipo ==tipos[i] 
select new ope_detalle_autoventa() 
{ 
ModifiedOn = DateTime.Now, 
ope_autoventaid = ope_autoventaid, 
ope_detalle_autoventaId = d.ope_detalle_autoventaId, 
ope_entregado = (d.ope_entregado - ((c== null ? 0 : c.ope_disponibles) - (r == null ? 0 : r.entregadototal))), 
ope_envase = d.ope_envase, 
ope_estado = d.ope_estado, 
ope_icono = d.ope_icono, 
ope_idsku = d.ope_idsku, 
ope_name = d.ope_name, 
ope_pedido = 0,//0 por que no pidio de esta carga sino de la que ya se gastó 
ope_precioV = d.ope_precioV, 
ope_prestamo = d.ope_prestamo, 
ope_promocion = d.ope_promocion, 
ope_skuid = d.ope_skuid, 
ope_tipo = d.ope_tipo, 
ope_autoventaidTarget = d.ope_autoventaidTarget, 
ope_skuidTarget = d.ope_skuidTarget, 
Ope_NumVenta = d.Ope_NumVenta, 
ope_descuento = d.ope_descuento, 
ope_cancelado =d.ope_cancelado , 
CreatedOn =DateTime.Now , 
ope_Codope =d.ope_Codope , 
ope_folio =d.ope_folio, 
ope_cantcanc =0, 
ope_estimado="0" 
} 
).ToList(); 

我用C改名n和我改變

on new { d.ope_idsku ,d.ope_tipo } equals new {nd.ope_idsku ,nd.ope_tipo }into nlj 
by d.ope_idsku equals nd.ope_idsku into nlj 

,但我得到了同樣的錯誤。

enter image description here

+7

移動你的代碼更往右一點點。我仍然可以看到一些角色。 – I4V

+2

對不對?還是離開? – angel

+0

謝謝 - 儘管爲了可讀性留下一些縮進本來會更好,但是大部分代碼都是水平滾動的。 – Rup

回答

0

我這個

if (nuevodetalle.Count == 0) 
       nuevodetalle.Add(detalle [0]); 
      ope_detalle_autoventa clone = (ope_detalle_autoventa)detalle[0].Clone(); 
      clone.ope_idsku = 0; 
      clone.ope_entregado = 0; 
      clone.ope_tipo = 0; 
      List<ope_detalle_autoventa> detallecargaactual = new List<ope_detalle_autoventa>(); 


      var x = (
       from d in detalle 
       join c in nuevodetalle 
       //on new { d.ope_idsku, d.ope_tipo } equals new { c.ope_idsku, c.ope_tipo } into clj 
       on d.ope_idsku equals c.ope_idsku into clj 
       from c in clj.DefaultIfEmpty (clone) 
       select new{ d, c}).ToList();`enter code here 

解決您可以看到我改變clj.DefaultIfEmpty (clone)