同一个服务器下的不同数据库,目前还没有进行跨服务器的查询,以后有待研究……

1.使用的是Left Join左查询,因此连接字符串应该是写的第一个表所在的数据库的连接字符串

假设数据库A,B,连接字符串分别为

A
server=localhost;Port=8090;user id=sa;password=123456;persistsecurityinfo=True;database=A;Charset=utf8;SslMode=none;Pooling=true;allowPublicKeyRetrieval=true
B
server=localhost;Port=8090;user id=sa;password=123456;persistsecurityinfo=True;database=B;Charset=utf8;SslMode=none;Pooling=true;allowPublicKeyRetrieval=true

一开始我陷入一个误区,我以为连接字符串的database参数只能写一个数据库,那就只能访问这一个数据库。那怎么去访问另一个呢?

2.1   左连接第一个查询的表tr_devicepoleinproject是数据库B里的表,则使用的DB应是  采用数据库B的连接字符串

  若是我第一个查询的是数据库B内的表,则连接字符串应以数据库B的为主。  若是不以此种方式去建立连接则无法查询

2.2  每一个查询表的后面要跟上这个表所在的数据库和表名   

   即     .AS<表A>("数据库A.表A")      AS<表B>("数据库A.表B")     

      .AS<表A1>("数据库B.表A1")    .AS<表B1>("数据库B.表B1") 

注意第一个查询的表不需要带<>  直接写  AS("“数据库名.表名”)  即可

剩下的就是正常的Left  join  查询   具体参考代码 如下:↓↓↓↓↓↓

            var counts = DB_B.Queryable<tr_devicepoleinproject>().AS("B.tr_devicepoleinproject")
.LeftJoin<tr_devicepoleindevice>((a, b) => a.DevicePoleID == b.DevicePoleID).AS<tr_devicepoleindevice>("B.tr_devicepoleindevice")
.LeftJoin<tr_deviceinoperationcompany>((a, b, c) => b.DeviceID == c.DeviceID).AS<tr_projectdevelopercompanyinoperationcompany>("B.tr_projectdevelopercompanyinoperationcompany")
.LeftJoin<tb_device>((a, b, c, d) => d.DeviceID == b.DeviceID).AS<tb_device>("B.tb_device")
.LeftJoin<tb_project>((a, b, c, d, e) => a.ProjectID == e.ProjectID).AS<tb_project>("B.tb_project")
.LeftJoin<tb_devicepole>((a, b, c, d, e, f) => a.DevicePoleID == f.DevicePoleID).AS<tb_devicepole>("B.tb_devicepole")
.LeftJoin<tb_operationcompany>((a, b, c, d, e, f, g) => c.OperationCompanyID == g.ID).AS<tb_operationcompany>("B.tb_operationcompany")
.LeftJoin<tb_monitordataday>((a, b, c, d, e, f, g, h) => a.DevicePoleID == h.PoleID && (h.UploadTime >= Convert.ToDateTime($"{start}") && h.UploadTime <= Convert.ToDateTime($"{end}"))).AS<tb_monitordataday>("A.tb_monitordataday")
.Where((a,b,c,d,e)=>e.ProjectDistrictID==3)
.GroupBy((a, b)=> new { b.DeviceID })
.Select((a, b, c, d, e, f, g, h) => new ExportData
{
MNCode = !string.IsNullOrWhiteSpace(h.DeviceMNCode) ? h.DeviceMNCode : d.MNCode,
//Tsp = h.MetricA34001 > 0 ? h.MetricA34001.ToString() : null, SqlFunc.AggregateAvg(it.Id)
Tsp = (double)SqlFunc.AggregateAvg(h.MetricA34001),
ProjectName = e.ProjectName,
ProjectAddress = e.ProjectAddress,
OperationCompanyName = g.CompanyName,
CreateTime = e.CreateTime.ToString(),
Status = f.Status == 0 ? "新增未上线" : f.Status == 1 ? "正常" : f.Status == 2 ? "维护" : f.Status == 3 ? "更换" : f.Status == 4 ? "暂停" : "拆除"
}).ToList();

总结:也是第一次做跨库的查询,难免陷入旧思想的误区,以为需要填入不同的连接字符串才能建立连接,甚至想到分开查询两个数据库的值,然后再进行查询,不过最后还是花费较少的代码去解决问题了,就是花在梳理业务逻辑上面挺多时间的,有待继续努力!!!

Sqlsugar 跨库查询小心得(同服务器不同数据库)的更多相关文章

  1. SQLServer跨库查询--分布式查询(转载)

    --用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sq ...

  2. 跨库查询(OpenDataSource)与链接服务器(Linking Server)

    一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you on ...

  3. 如何使用SQL SERVER数据库跨库查询

    SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...

  4. SqlServer跨库查询

    由于业务的拆分,数据库拆分为两种作用: 汇总数据库(Master,头节点数据库), 子节点数据库(Compute Node,计算子节点数据库) 这样,就设计到子节点访问头节点数据库中的某张汇总表,这种 ...

  5. ACCESS-如何多数据库查询(跨库查询)

    测试通过:ACCESSselect * from F:\MYk.mdb.tablename说明:1.查询语句2.来原于哪(没有密码是个路径)3.查询的表名 ====================== ...

  6. EF 跨库查询

    原因:最近公司项目,遇到一个ef跨库查询的问题.(只是跨库,并不是跨服务器哈) 主要我们的一些数据,譬如地址,城市需要查询公共资料库. 但是本身我的程序设计采用的是ef框架的.因此为这事花费了1天时间 ...

  7. mysql 跨库查询问题

    MySQL实现跨服务器查询 https://blog.csdn.net/LYK_for_dba/article/details/78180444 mysql> create database l ...

  8. SQLServer跨库查询--分布式查询

    出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...

  9. oracle使用dblink跨库查询的例子

    本文介绍了oracle数据库使用dblink进行跨库查询的方法,oracle dblink跨库查询教程,需要的朋友参考下.   oracle dblink跨库查询 方法一:首先,创建数据库链接: 复制 ...

  10. SQL Server创建dblink跨库查询

    dblink是跨库查询的主要手段,在Oracle创建DbLink中已经演示了Oracle中如何创建及使用DbLink,这篇博客看看SQL Server中如何使用. 一.通过图形化界面直接创建 选择当前 ...

随机推荐

  1. ProxyPin 抓包,原来可以这么简单!

    ​ 你是否还在为网络请求的抓包发愁?其实,ProxyPin 可以让抓包操作变得异常简单!不需要复杂的设置,也不用繁琐的配置,轻松几步就能实现.让我们一起来看看吧! 抓包操作常用于测试网络请求.分析接口 ...

  2. WiFi基础(六):天线基础知识

    liwen01 2024.10.01 前言 麦克斯韦预言了电磁波的存在,赫兹通过实验证实了麦克斯韦的预言,马可尼基于无线电磁波的原理发明了无线电报系统,从此人类进入无线通信系统时代. 天线是通信系统中 ...

  3. 旧电脑配置玩魔兽世界带不动?云电脑轻松解决,用ToDesk!

    最近魔兽世界重新回归,不少游戏老玩家都摩拳擦掌准备上线回忆青春,但发现手里的旧电脑早已带不动游戏,硬要打开很容易出现画面卡顿.延迟严重,甚至频繁掉线,这些问题都让游戏乐趣大打折扣.但要为此再重新买一台 ...

  4. Solon Ioc 的魔法之注解注入器(也可叫虚空注入器)

    很多人惊叹于 Solon 的注入能力,一个注解怎可注万物??? 一.注解注入器 Solon Ioc 的四大魔法之一:注解注入器(BeanInjector<T extends Annotation ...

  5. 轻量级网络-VoVNet 论文解读

    摘要 1,介绍 2,高效网络设计的影响因素 2.1,内存访问代价 2.2,GPU计算效率 3,建议的方法 3.1,重新思考密集连接 3.2,One-Shot Aggregation 3.3,构建 Vo ...

  6. chrony服务器

    1.安装 yum install chrony -y 2.配置文件 主配置文件:/etc/chrony.conf server ntp.aliyun.com iburst         ---指定阿 ...

  7. Jenkins Job触发其他远程Job

    https://blog.csdn.net/diaojian66/article/details/117334537 如果不想遇到连接远程Jenkins主机失败后的反复尝试,去掉认证会是一个不错的选择 ...

  8. cgo:go数组转c数组调用c函数

    package main /* #include <stdio.h> void processInt2DArray(int* arr, int rows, int cols) { for ...

  9. IIC通信协议详解 & PCF8591应用(Verilog实现)

    该文章结合PCF8591 8-bit AD/DA 模数/数模转换器来详细介绍IIC通信协议,尽量做到条理清晰,通俗易懂.该文图片均从PCF8591手册中截取,一定程度上引导读者学习阅读data she ...

  10. php之编译安装

    1. 安装所需环境 yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng ...