Linq中的高级用法

实体

Commodity: class Commodity { public int Id { get; set; } public string Name { get; set; } public string Price { get; set; } public int Num { get; set; } } Customer: class Customer { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Sex { get; set; } public int Age { get; set; } } ShoppingCart: class ShoppingCart { public int CommodityId { get; set; } public int CustomerId { get; set; } public int Num { get; set; } }


初始数据

Customer[] customers = new Customer[]{ new Customer{Id=000001,FirstName="李",LastName="逍遥",Age=18,Sex="男"}, new Customer{Id=000002,FirstName="赵",LastName="灵儿",Age=16,Sex="女"}, new Customer{Id=000003,FirstName="林",LastName="月如",Age=18,Sex="女"}, new Customer{Id=000004,FirstName="阿",LastName="奴",Age=17,Sex="女"} }; Commodity[] commodities = new Commodity[]{ new Commodity{Id=1,Name="金创药",Price="100",Num=999}, new Commodity{Id=2,Name="花露水",Price="150",Num=999}, new Commodity{Id=3,Name="腊肉",Price="55",Num=999}, new Commodity{Id=4,Name="盐巴",Price="20",Num=999}, new Commodity{Id=5,Name="黑玉断续膏",Price="1000",Num=100}, new Commodity{Id=6,Name="九花玉露丸",Price="2000",Num=100} }; ShoppingCart[] shoppingCart = new ShoppingCart[]{ new ShoppingCart{CommodityId=1,CustomerId=000001,Num=100}, new ShoppingCart{CommodityId=2,CustomerId=000001,Num=100}, new ShoppingCart{CommodityId=1,CustomerId=000002,Num=50}, new ShoppingCart{CommodityId=2,CustomerId=000002,Num=100}, new ShoppingCart{CommodityId=4,CustomerId=000003,Num=20}, new ShoppingCart{CommodityId=3,CustomerId=000003,Num=23}, new ShoppingCart{CommodityId=5,CustomerId=000003,Num=1}, new ShoppingCart{CommodityId=6,CustomerId=000003,Num=2} };


分组(为多个字段进行分组)

var data3 = from sp in shoppingCart.AsEnumerable<ShoppingCart>() group sp by new { sp.CommodityId, sp.CustomerId } into cc select new { CommodityTypeNum = cc.Count<ShoppingCart>(), CommodityId=cc.Key.CommodityId, CustomerId=cc.Key.CustomerId }; Console.WriteLine("Three Search is Begin"); foreach (var tmp in data3) { Console.WriteLine(tmp.CommodityTypeNum); } Console.WriteLine("\t\n\t\n");


执行结果:

Three Search is Begin

1

1

1

1

1

1

1

1

分组(对不同表中的字段进行分组)

var data1 = from customer in customers.AsEnumerable<Customer>() join shoppingcart in shoppingCart.AsEnumerable<ShoppingCart>() on customer.Id equals shoppingcart.CustomerId join commodity in commodities.AsEnumerable<Commodity>() on shoppingcart.CommodityId equals commodity.Id group new { customer,shoppingcart,commodity} by customer.FirstName+customer.LastName into shopDetails select new { CustomerName = shopDetails.Key, ItemNum = shopDetails.Count(), Items = from t in shopDetails select new { CommodityName=t.commodity.Name, CommodityPrice=t.commodity.Price, Num=t.shoppingcart.Num } }; foreach (var tmp in data1) { Console.WriteLine(string.Format("CustomerName:{0},CommodityId:{1}" , new object[] { tmp.CustomerName, tmp.ItemNum})); foreach (var tmp2 in tmp.Items) { Console.WriteLine(string.Format("\tCommodityName:{0} ,CommodityPrice:{1},Num:{2}", tmp2.CommodityName, tmp2.CommodityPrice , tmp2.Num)); } }


执行结果:

CustomerName:李逍遥,CommodityId:2

CommodityName:金创药,CommodityPrice:100,Num:100

CommodityName:花露水,CommodityPrice:150,Num:100

CustomerName:赵灵儿,CommodityId:2

CommodityName:金创药,CommodityPrice:100,Num:50

CommodityName:花露水,CommodityPrice:150,Num:100

CustomerName:林月如,CommodityId:4

CommodityName:盐巴,CommodityPrice:20,Num:20

CommodityName:腊肉,CommodityPrice:55,Num:23

CommodityName:黑玉断续膏,CommodityPrice:1000,Num:1

CommodityName:九花玉露丸,CommodityPrice:2000,Num:2

左/右连接

var data2 = from c in customers.AsEnumerable() join sc in shoppingCart.AsEnumerable() on c.Id equals sc.CustomerId into tmpGroup //这行代码是右连接的关键 from leftjoindata in tmpGroup .DefaultIfEmpty( new ShoppingCart { CommodityId = -1, CustomerId = -1, Num = -1 } ) select new { CustomerName=c.FirstName+c.LastName, CommodityId=leftjoindata.CommodityId, CommodityNum=leftjoindata.Num }; foreach (var tmp in data2) { Console.WriteLine( string.Format("CustomerName:{0} ,CommodityId:{1} ,CommodityNum:{2}" , tmp.CustomerName , tmp.CommodityId , tmp.CommodityNum)); }


执行结果:

CustomerName:李逍遥,CommodityId:1,CommodityNum:100

CustomerName:李逍遥,CommodityId:2,CommodityNum:100

CustomerName:赵灵儿,CommodityId:1,CommodityNum:50

CustomerName:赵灵儿,CommodityId:2,CommodityNum:100

CustomerName:林月如,CommodityId:4,CommodityNum:20

CustomerName:林月如,CommodityId:3,CommodityNum:23

CustomerName:林月如,CommodityId:5,CommodityNum:1

CustomerName:林月如,CommodityId:6,CommodityNum:2

CustomerName:阿奴,CommodityId:-1,CommodityNum:-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值