Linq的join后面跟多个条件

在linq中join后面有时候需要跟多个条件。但是它限定了一个on后面只能有一个equals。

所以我们用匿名类来实现。


from s in lstA

join b in lstB on new {s.ID,s.a_Name}equals new {b.ID,b.b_Name} select new {};

这样就解决了join后面跟多个条件。但是他也是有条件限定的,比如,数据类型必须一样,也就是a的ID是int类型,a_Name是字符串类型,那么b的ID也必须是int类型(及时是int?类型也不行),b_Name也必须是字符串类型。

其实还有一种方法可以实现

data = (from a in lstClassOneStu
                    join b in lstClassTwoStu on a.Name equals b.Name into other
                    from s in other where s.Age == a.Age
                    select new Student() { Name = a.Name, Age = a.Age, Gender = a.Gender }).ToList();

当然,我还是喜欢第一种,当用sql server看sql语句的时候,其实就是普通sql语句一样,在on后面跟了2个条件

下面是全部代码

List<Student> lstClassOneStu = new List<Student>() {
                new Student(){ ID = 1, Name = "曹操", Age = 30, Gender = true},
                new Student(){ ID = 2, Name = "刘备", Age = 32, Gender = true},
                new Student(){ ID = 3, Name = "关羽", Age = 33, Gender = true},
                new Student(){ ID = 4, Name = "张飞", Age = 34, Gender = true},
                new Student(){ ID = 5, Name = "赵云", Age = 35, Gender = true}
            };
            List<Student> lstClassTwoStu = new List<Student>() {
                new Student(){ ID = 6, Name = "诸葛亮", Age = 31, Gender = true},
                new Student(){ ID = 7, Name = "马超", Age = 32, Gender = true},
                new Student(){ ID = 8, Name = "黄忠", Age = 38, Gender = true},
                new Student(){ ID = 9, Name = "吕布", Age = 39, Gender = true},
                new Student(){ ID = 10, Name = "赵云", Age = 35, Gender = false}
            };


            List<Student> data = (from a in lstClassOneStu
                                  join b in lstClassTwoStu on new { a.Name, a.Age } equals new { b.Name, b.Age }
                                  select new Student() { Name = a.Name, Age = a.Age, Gender = a.Gender }).ToList();
            data = (from a in lstClassOneStu
                    join b in lstClassTwoStu on a.Name equals b.Name into other
                    from s in other where s.Age == a.Age
                    select new Student() { Name = a.Name, Age = a.Age, Gender = a.Gender }).ToList();
            for (int i = 0; i < data.Count; i++)
            {
                Response.Write(data[i].Name + "," + data[i].Age + "," + data[i].Gender);
            }

这是测试,没有真实的去读数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LINQ Join操作是用于将两个序列中的元素进行匹配,然后将它们合并为一个新的序列。它与SQL语句中的JOIN操作类似。Join操作需要两个输入源,通常是两个集合或表格,以及一个键选择器,它用于指定用于匹配元素的键。Join操作返回一个新的序列,其中包含匹配的元素对。 下面是一个简单的LINQ Join操作示例: ```csharp var customers = new List<Customer> { new Customer {Id = 1, Name = "Alice", City = "New York"}, new Customer {Id = 2, Name = "Bob", City = "Chicago"}, new Customer {Id = 3, Name = "Charlie", City = "Los Angeles"} }; var orders = new List<Order> { new Order {Id = 1, CustomerId = 1, ProductName = "Product A"}, new Order {Id = 2, CustomerId = 2, ProductName = "Product B"}, new Order {Id = 3, CustomerId = 2, ProductName = "Product C"}, new Order {Id = 4, CustomerId = 3, ProductName = "Product D"} }; var customerOrders = from customer in customers join order in orders on customer.Id equals order.CustomerId select new { CustomerName = customer.Name, ProductName = order.ProductName }; foreach (var item in customerOrders) { Console.WriteLine($"Customer Name: {item.CustomerName}, Product Name: {item.ProductName}"); } ``` 在上面的示例中,我们使用Join操作将客户和订单集合中的元素进行匹配,并将匹配的结果放入一个新的匿名对象中。最后,我们通过foreach循环遍历新的序列并输出结果。 希望这个例子能够帮助你理解LINQ Join操作的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值