日期:2014-05-20 浏览次数:21242 次
public class CaigouTable
{
public string pSku { get; set; }//SKU
public string ChineseName { get; set; }//中文名称
public Hashtable Quantity { get; set; }//数量
public ArrayList OrderIDs { get; set; }//订单来源_订单号
}
//测试添加数据
List<CaigouTable> list=new List<CaigouTable>();
for(int i=1;i<3;i++)
{
CaigouTable ct=new CaigouTable();
Hashtable htProperty = new Hashtable();
ArrayList orderIDs = new ArrayList();
ct.pSku="111";
ct.ChineseName ="aa";
htProperty.Add("test", 1);
ct.Quantity = htProperty;
orderIDs.Add("a_111");
ct.OrderIDs = orderIDs;
list.add(ct);
}
想要根据相同的pSku,Quantity.key合并数据,Quantity.value相加,其他不变
最后的结果就是
111
aa
test 2
a_111,a_111
var query = from c in list
group c by new { c.pSku } into g
select new
{
sku = g.Select(p => p.pSku).First(),
name = g.Select(p => p.ChineseName).First(),
// Quantity =
// OrderIDs =
};
少个条件,还有注释的地方不会写,不知道hashtables内的key是否可以作为条件,这个hashtables只有一条数据,固定死的。
如果hashtable不能做条件/或者不知道怎么写,可以去掉Quantity.key这个条件
主要是下面注释的地方怎么写
//你的类结构设计的太蛋疼了
void Main()
{
//测试添加数据
List<CaigouTable> list=new List<CaigouTable>();
for(int i=1;i<3;i++)
{
CaigouTable ct=new CaigouTable();
Hashtable htProperty = new Hashtable();
ArrayList orderIDs = new ArrayList();
ct.pSku="111";
ct.ChineseName ="aa";
htProperty.Add("test", 1);
ct.Quantity = htProperty;
orderIDs.Add("a_111");
ct.OrderIDs = orderIDs;
list.Add(ct);
}
var query = from c in list
group c by new { c.pSku,c.Quantity.Cast<DictionaryEntry>().First().Key} into g
select new
{
sku = g.Key.pSku,
name = g.Select(p => p.ChineseName).First(),
Quantity =new {Key=g.Key.Key, value=g.Sum(x=>x.Quantity.Cast<DictionaryEntry>().Sum(y=>(int)y.Value))},
OrderIDs = string.Join(",",g.SelectMany(x=>x.OrderIDs.ToArray().Select(y=>y.ToString()).ToArray()).ToArray())
};
}
public class CaigouTable
{
public string pSku { get; set; }//SKU
public string ChineseName { get; set; }//中文名称
public Hashtable Quantity { get; set; }//数量
public ArrayList OrderIDs { get; set; }//订单来源_订单号
}