有一个进货表
ID,日期,供应商,。。。
还有进货Item表
ID,进货表ID,产品ID,数量,价格,。。。
退货表,退货Item表也类似
现在想要从这四个表里取出某个供应商对某个产品的合计,得到如下的表格
供应商,产品,总进货数量,总进货价格,总退货数量,总退货价格,。。。
请问用linq lambda应该怎么写呢?
如果实在不行,用linq写也成。
谢谢大家
------解决思路----------------------
合起来写太长了,可读性也降低了,不过,你可以建立视图查询的啊,既然用了linq,也可以用表关联查询的,那样也很简单了。
直接先查出进货与退货记录的list记录
var 进货查询 = 进货.Join(进货明细表, a => a.id, b => b.进货id, (a, b) => new { a.供应商, b.产品, b.数量, b.单次总价, 类别 = 1 }).ToList();
var 退货查询 = 退货.Join(退货明细表, a => a.id, b => b.退货id, (a, b) => new { a.供应商, b.产品, b.数量, b.单次总价, 类别 = 2 }).ToList();
var 结果 = 进货查询.Concat(退货查询).GroupBy(p => new { p.供应商, p.产品 }).Select(p => new
{
p.Key.供应商,
p.Key.产品,
进货总数量 = p.Any(s => s.类别 == 1) ? p.Where(s => s.类别 == 1).Sum(s => s.数量) : 0,
进货总金额 = p.Any(s => s.类别 == 1) ? p.Where(s => s.类别 == 1).Sum(s => s.单次总价) : 0,
退货总数量 = p.Any(s => s.类别 == 2) ? p.Where(s => s.类别 == 2).Sum(s => s.数量) : 0,
退货总金额 = p.Any(s => s.类别 == 2) ? p.Where(s => s.类别 == 2).Sum(s => s.单次总价) : 0
}).OrderBy(p => p.供应商).ThenBy(p => p.产品);