linq 左连接实现两个集合的合并

3 篇文章 0 订阅
2 篇文章 0 订阅

//第一个集合为所有的数据

var specilist = new List<Me.SpecificationsInfo>();

                        var resultall = (from a in dbContext.by_sku_items
                                        join b in dbContext.by_attributes on a.by_attributes_id equals b.by_attributes_id
                                        join c in dbContext.by_attribute_values on a.by_attribute_values_id equals c.by_attribute_values_id
                                        where a.by_product_id == proid
                                        select new Me.OrderEditAll
                                        {
                                            skuid = a.by_sku_items_id,
                                            colorid = b.by_attributes_id,
                                            color = b.attributes_name,
                                            sizeid = c.by_attribute_values_id,
                                            size = c.value_str
                                        }).ToList();

//第二个集合为需要合并的集合
                        var orderitemlist = dbContext.by_order_item.Where(t => t.order_id == _orderid && t.by_product_id == proid).ToList();
                        var resultorder = (from a in orderitemlist
                                     join b in dbContext.by_sku_items on a.by_sku_items_id equals b.by_sku_items_id
                                     join c in dbContext.by_attributes on b.by_attributes_id equals c.by_attributes_id
                                     join d in dbContext.by_attribute_values on b.by_attribute_values_id equals d.by_attribute_values_id
                                     //where b.status == statusWorking && c.status == statusWorking && d.status == statusWorking
                                     orderby c.index, d.index
                                     select new Me.OrderEdit
                                     {
                                         skuid = a.by_sku_items_id,
                                         id = a.by_order_item_id,
                                         nums = a.nums,
                                         colorid = c.by_attributes_id,
                                         color = c.attributes_name,
                                         sizeid = d.by_attribute_values_id,
                                         size = d.value_str
                                     }).ToList();

//第三个为最终结果,将不为空的数据合并到所有集合中
                        var result = (from all in resultall
                                     join order in resultorder on all.skuid equals order.skuid into temp
                                     from tt in temp.DefaultIfEmpty()
                                     select new Me.OrderEdit
                                     {
                                         skuid = all.skuid,
                                         id = tt != null ? tt.id : 0,
                                         nums = tt != null ? tt.nums : 0,
                                         colorid = all.colorid,
                                         color = all.color,
                                         sizeid = all.sizeid,
                                         size = all.size

                                     }).ToList();


//第二种为sql实现方式

select by_sku_items_id,sum(t1.by_order_items_id) as by_order_items_id,sum(t1.nums) as nums,t1.by_attributes_id,t1.attributes_name,t1.by_attribute_values_id,t1.value_str from 
(
select  * from (
select * from 
(select a.by_sku_items_id,0 as by_order_items_id,0 as nums,b.by_attributes_id,b.attributes_name,c.by_attribute_values_id,c.value_str from by_sku_items a
join by_attributes b on a.by_attributes_id=b.by_attributes_id
join by_attribute_values c on a.by_attribute_values_id=c.by_attribute_values_id
where by_product_id=9 ) aa
UNION 
select * from (
select a.by_sku_items_id,a.by_order_item_id,a.nums,c.by_attributes_id,c.attributes_name,d.by_attribute_values_id,d.value_str
from by_order_item a
join by_sku_items b on a.by_sku_items_id=b.by_sku_items_id
join by_attributes c on b.by_attributes_id=c.by_attributes_id
join by_attribute_values d on b.by_attribute_values_id=d.by_attribute_values_id
where b.status=2 and c.status=2 and d.status=2 
and a.order_id=1459428164000004 and a.by_product_id=9
) bb
) t 
) t1 group by by_sku_items_id,by_attributes_id,by_attribute_values_id,attributes_name,value_str

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值