Chloe.Orm多表连接查询 (二)

在上一篇文章中有提怎么创建框架,今天主要说一些复杂的查询,也是多表的查询
框架里的查询都是Linqlambda操作。下面就来看一些代码

1.建立连接
var user_city_province = context.Query<User>()
                         .InnerJoin<City>((user, city) => user.CityId == city.Id)
                         .InnerJoin<Province>((user, city, province) => city.ProvinceId == province.Id);
 上面建立连接是一个三表连接查询,如需要更多的查询,在后继续添加,
 下边也是一种建立连接多表查询,但本人感觉很复杂
    IQuery<User> users = context.Query<User>();
    IQuery<Product> products = context.Query<Product>();
    IJoiningQuery<User, Product> user_product = users.InnerJoin(products, (user, product) => user.ID == product.c_admin_ID);
2. 查询信息
 返回所有的字段
//调用Tolist就返回new里面的list集合,返回所有的信息
var linked= user_city_province.Select((user, city, province) => new
{
    User = user,
    City = city,
    Province = province
});
var result = linked.Where(a => a).ToList();
----生成的SQL语句
select Users.Id as Id,Users.Name as Name,Users.Gender as Gender,Users.Age as Age,Users.cityId as cityId,Users.OpTime as OpTime,city.Id as Id0,city.Name as Name0,city.ProvinceId as ProvinceId,Province.Id as Id1,Province.Name as Name1  from Users as Users 
left join city as city  on Users.cityId = city.Id 
left join Province as  Province on city.ProvinceId = Province.Id
where Users.Id = 1
 如果不想返回所有字段,可以使用以下的方法
//返回的字段,都是指定的字段
var result1 = qq.Where(a => a.User.Id == 1)
                .Select(a => new { UserId = a.User.Id, UserName = a.User.Name, CityName = a.City.Name, ProvinceName = a.Province.Name })
                .ToList();
//可以获取指定的字段
user_city_province.Select((user, city, province) => new
{
    UserId = user.Id,
    UserName = user.Name,
    CityName = city.Name,
    ProvinceName = province.Name
}).Where(a => a.UserId == 1).ToList();
---生成的 sql语句 只会包含 所需的字段
SELECT [Users].[Id] AS [UserId],[Users].[Name] AS [UserName],[City].[Name] AS [CityName],[Province].[Name] AS [ProvinceName] 
   FROM [Users] AS [Users] 
   INNER JOIN [City] AS [City] ON [Users].[CityId] = [City].[Id] 
   INNER JOIN [Province] AS [Province] ON [City].[ProvinceId] = [Province].[Id] 
   WHERE [Users].[Id] = 1

本人后续还会更新这篇文章,敬请期待。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值