zoukankan      html  css  js  c++  java
  • linq学习之join

    using factory;
     
    namespace MyWebSiteTest
    {
        public partial class linqtest : System.Web.UI.Page
        {
            static List<Customer> customers;
            static List<Product> products;
            static List<Order> orders;
            public static void CreateEntities()
            {
                customers = new List<Customer>()
                {
                    new Customer(){ CustomerId = 1, Name = "CA", Age=13},
                    new Customer(){ CustomerId = 2, Name = "CB", Age=13},
                    new Customer(){ CustomerId = 3, Name = "CC", Age=13},
                    new Customer(){ CustomerId = 4, Name = "CD", Age=13}
                };
                products = new List<Product>()
                {
                    new Product(){ ProductId = 1, Name = "PA", Origin="P1" },
                    new Product(){ ProductId = 2, Name = "PB", Origin="P2" },
                    new Product(){ ProductId = 3, Name = "PC", Origin="P1" },
                    new Product(){ ProductId = 4, Name = "PD", Origin="P3" }
                };
                orders = new List<Order>()
                {
                    new Order(){ OrderId = 1 , CustomerId =1, 
                        Products = new List<Product>{ 
                            new Product(){ ProductId = 2, Name = "PB", Origin="P2" },
                            new Product(){ ProductId = 3, Name = "PC", Origin="P1" }
                        }},
                    new Order(){ OrderId = 2 , CustomerId =1, 
                        Products = new List<Product>{ 
                            new Product(){ ProductId = 3, Name = "PC", Origin="P1" },
                            new Product(){ ProductId = 4, Name = "PD", Origin="P3" }
                        }},
                    new Order(){ OrderId = 3 , CustomerId =3, 
                        Products = new List<Product>{ 
                            new Product(){ ProductId = 4, Name = "PD", Origin="P3" }
                        }},
                    new Order(){ OrderId = 4 , CustomerId =2, 
                        Products = new List<Product>{ 
                            new Product(){ ProductId = 1, Name = "PA", Origin="P1" },
                            new Product(){ ProductId = 4, Name = "PD", Origin="P3" }
                        }}
                };
            }
     
            protected void Page_Load(object sender, EventArgs e)
            {
                System.Text.StringBuilder outhtml = new System.Text.StringBuilder();
                CreateEntities();
     
                /*常见的内连接:
                 * (1).连接条件:c.CustomerId equals o.CustomerId 只能使用 equals 不能用 =,==,等于 等表示。
                 * (2).条件顺序:c.CustomerId equals o.CustomerId ,range variable: c 和c之前的顺序不能颠倒。
                 */
                var join_query = from c in customers
                                 join o in orders on c.CustomerId equals o.CustomerId
                                 where o.OrderId == 2
                                 select c;
                join_query.ToList().ForEach(x => Response.Write(string.Format("Id:{0}, Name:{1}", x.CustomerId, x.Name) + ""));
                Response.Write("<hr /><br />");
     
                /*简单的分组*/
                var group_query = from c in customers
                                  join o in orders on c.CustomerId equals o.CustomerId into os
                                  select new { c, os };
                group_query.ToList().ForEach(
                    x =>
                    {
                        outhtml.AppendLine(string.Format("<strong>Id:</strong>{0}, <strong>Name:</strong>{1}", x.c.CustomerId, x.c.Name) + "<br />");
                        x.os.ToList().ForEach(ch => { outhtml.AppendLine(string.Format(" --Order Id:{0}", ch.OrderId) + "<br />"); });
                        //可以再次筛选或其它处理,如下:
                        //(from tt in x.os select tt).ToList().ForEach(ch => { outhtml.AppendLine(string.Format(" --Order Id:{0}", ch.OrderId) + "<br />"); });
                    }
                );
                Response.Write(outhtml);
                Response.Write("<br />");
                
                /*
                 * Left Join 我们在SQL里经常用到,让我们来看看LINQ里怎么实现它:
                 */
                var lftjon_quer = from c in customers
                                  join o in orders on c.CustomerId equals o.CustomerId into os
                                  from newtag in os.DefaultIfEmpty(
                                    new Order { OrderId = 0, CustomerId = 0, Products = new List<Product>() }
                                  )
                                  select new { c, newtag };
                lftjon_quer.ToList().ForEach(x => Response.Write(string.Format("Customer Id:{0}, Name:{1}--Order Id:{0}<br />", x.c.CustomerId, x.newtag.OrderId)));
                Response.Write("<br />");
            }
        }
    }
     
    namespace factory
    {
        class Customer
        {
            public int CustomerId { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
        }
        class Product
        {
            public int ProductId { get; set; }
            public string Name { get; set; }
            public string Origin { get; set; }
        }
        class Order
        {
            public int OrderId { get; set; }
            public int CustomerId { get; set; }
            public List<Product> Products { get; set; }
        }
    }

  • 相关阅读:
    选择和冒泡
    马尔科夫模型
    网络IO
    java项目相对路径
    MySQL 数据类型
    基于 Token 的身份验证方法
    git 打标签
    git版本回退
    robotframework使用过程中的一些总结
    robotframework安装robotframework-requests库遇到的几种问题
  • 原文地址:https://www.cnblogs.com/BluceLee/p/13950333.html
Copyright © 2011-2022 走看看