Linq多表查询

Linq多表查询

  • 内连接
    • 直接join表
 				var query2 = from a in Table_a
                           //连接表b
                           join b in Table_b  on a.BId equals b.Id into Table_b_temps
                            from bn in Table_b_temps   
                           //连接表c
                           join c in Table_c on b.Cid  equals c.id into Table_c_temps
                           from cn in Table_c_temps                                                      
                           //条件
                           where a.id ==12                               
                          //从表中拿到所需要的
                           select new
                         {
                           AId=a.Id
                           BId=bn.Id
                           CId=cn .Id          
                         }; 
  • 左连接
    • 即以左边的表为标准 左边的表数据有则显示,无的情况下则不显示
    • 当左表有数据,右表无数据时会展示出来,右表的字段为空
    • 当左表无数据时,右表有数据的情况下即不会展示
    • 关键字为DefaultIfEmpty() 后面取值的时候就用三元表达式来判断
			 var leftJoin = from a in Table_a
                           //连接表b
                           join b in Table_b  on a.BId equals b.Id
                           from bn in Table_b_temps  
                           //以b表为中心表c
                           join c in Table_c on bn.Cid  equals c.id into Table_c_temps
                           from cn in Table_c_temps.DefaultIfEmpty()                                                      
                           //条件
                           where a.id ==12                               
                          //从表中拿到所需要的
                           select new
                         {
                           AId=a.Id
                           BId=bn.Id
                           CId=cn!=null ?cn.Id:0         
                         };                     
  • 多条件连接
  • 即Join条件多个的情况下,不如说现在应用一个新的表,但是条件是要与那2个表相连,这时候条件不是一个了。
  • on new { AId = a.Id, BId = b.id } equals new { AId = c.Id, BId = c.id } into Table_c_temps
 			var list = from a in Table_a
                        //连接表b
                        join b in Table_b  on a.BId equals b.Id
                        from bn in Table_b_temps  
                        //连接表c
                        join c in Table_c 
                        //将条件全放进去 相对应
                        on new { AId = a.Id, BId = b.id  } equals new { AId = c.aId, BId = c.bId  } into Table_c_temps
                        from cn in Table_c_temps.DefaultIfEmpty()                                                      
                        //条件
                        where a.id ==12                               
                       //从表中拿到所需要的
                        select new
                      {
                        AId=a.Id
                        BId=bn.Id
                        CId=cn!=null ?cn.Id:0         
                      };                     
  • 分组
  • 将重复的数据过滤

var ChildPhotoList = (from l in list
                     group l by new { l.Id, l.Name,, l.StartDate, l.EndDate, l.Url, l.Img }
                     into p
                     select new
                     {
                         Id = p.Key.Id,
                         Url = p.Key.Url,
                         EndDate = p.Key.EndDate,
                         StartDate = p.Key.StartDate,
                         Img = p.Key.Img,               
                         Name = p.Key.Name,
                         //将未分组的可以弄成一个List集合
                         Items = p.Select(p => new 定义的类
                         {
                             ChildId = p.ChildId,
                             ChildName = p.ChildName,
                         }).ToList(),
                     }).ToList();                   
  • 合并
  • 当条件查询的结果需要合并时可以这样

            var l1 = (from s in da.linqname
                   	  where s.name.Contains(姓名关键字)
                  	 select s).ToList();
            var l2 = (from s in da.linqname
                      orderby s.Phone.Contains(手机号关键字)
                      select s).ToList();
          //合并2次的结果         
     	   var item=  l1.Concat(l2);

            foreach (var l in ll)
            {
                Console.Write(l.names+"\n");
            } 

合并的话 只要数据类型和顺序是一样的可以组合在一起,但是可能存在相同数据,可以将其进行分组筛选

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
异步 LINQ 多表查询是一种以异步方式执行的查询操作,涉及多个数据表。通常情况下,异步 LINQ 多表查询被用于处理执行时间较长的操作,以提高性能和响应性。在异步 LINQ 多表查询中,可以使用 LINQ 查询表达式或方法语法来编写查询。 具体来说,异步 LINQ 多表查询通常涉及多个数据表,通过将它们连接起来,筛选出需要的数据。这可以通过使用 `join` 关键字将两个或多个表连接在一起,使用 `where` 条件筛选数据,以及使用 `select` 投影查询结果。 举个例子,假设我们有两个表:`Customers` 和 `Orders`。我们想要查询所有姓氏为 "Smith" 的客户及其对应的订单。我们可以使用以下代码来实现异步 LINQ 多表查询: ```csharp var query = from customer in dbContext.Customers join order in dbContext.Orders on customer.Id equals order.CustomerId where customer.LastName == "Smith" select new { customer, order }; var result = await query.ToListAsync(); ``` 在上述代码中,我们使用了 LINQ 查询表达式来连接 `Customers` 和 `Orders` 表,并筛选出姓氏为 "Smith" 的客户及其对应的订单。最后,通过调用 `ToListAsync` 方法将查询结果异步返回。 总结起来,异步 LINQ 多表查询是一种以异步方式执行的查询操作,可以通过连接多个数据表,筛选数据,并投影查询结果来满足特定需求。通过使用异步 LINQ 多表查询,我们可以提高性能和响应性,特别是在处理执行时间较长的操作时。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [一文说通异步 LINQ](https://blog.csdn.net/biyusr/article/details/125575777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Linq多表查询](https://blog.csdn.net/weixin_44543189/article/details/89303092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值