EF写INNER JOIN 链接
面对多表的查询,一般都是多表连接后下面再写条件,但是有一种写法可以提升一下EF生成的语句的效率
首先先去查询每一个表,把每一个表对应的条件附加上去,注意:过滤数据最多的条件放在首先位置
var lt = from l in l
where l.UserKind ==
select l;
if (query.CreateDateStart!=null)
{
l = l .Where(t=> t.CreateDate>= query.CreateDateStart);
}
if (query.CreateDateEnd != null)
{
l = l .Where(t => t.CreateDate <= query.CreateDateEnd);
}
var ot= from o in o
select o;
if (!string.IsNullOrWhiteSpace(query.DataSource))
{
o= o.Where(t => t.DataSource == query.DataSource);
}
if (!string.IsNullOrWhiteSpace(query.ServiceSectID))
{
o= o.Where(t => t.ServiceSectID == query.ServiceSectID);
}
if (!string.IsNullOrWhiteSpace(query.AccessionNumber))
{
o= o.Where(t => t.AccessionNumber == query.AccessionNumber);
}
var vt= from v in v
select v;
if (!string.IsNullOrWhiteSpace(query.MedRecNO))
{
v= v.Where(t => t.MedRecNO == query.MedRecNO);
}
以上述三张表为例,
分别取放入对应的条件,然后组合起来,写inner join
//查询结果联表,做inner查询
var querySql = from o in ot
join v in vt
on o.VisitUID equals v.VisitUID
join l in lt
on o.ObservationUID equals l.BusinessUID
select new AccessToPatientsInfo
{
Name=p.Name,
TypeCode=l.TypeCode,
MedRecNO=v.MedRecNO,
DataSource=o.DataSource,
ServiceSectID=o.ServiceSectID,
AccessionNumber=o.AccessionNumber,
ServiceText=o.ServiceText,
CreateDate=l.CreateDate
};
EF写INNER JOIN 链接的更多相关文章
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- EF写in
qualityStatisticsInfoSql.Where(t => successStateArray.Contains(t.UploadReportFlag)); 如果写成 quality ...
- 利用EF Core的Join进行多表查询
背景 话说有这么一家子,老公养了一条狗,老婆养了一只猫. 数据库的设计 人表 宠物表 通过表可以知道,宠物通过Owner指向主人的Id. 问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎 ...
- EF Core中Join可以进行子查询
我们来看看下面的代码,这个代码是一个INNER JOIN的EF Core查询,其中用SubCategory表INNER JOIN了SubCategoryLanguage表,但是我们需要在SubCate ...
- EF写统计
EF的特性是,你from的第一个表为主表,接下来的所有表以左联或者内联或者交叉连接的方式去显示,不会出现右联, 在编写的时候,可以先确定个数据源,然后对这个数据源进行数据的统计, 例如SQL: -- ...
- LINQ,EF联合查询join
public object GetListAdmin() { //return db_C56.Admins // .Where(a => a.Status != "D") ...
- linq里lambda写的join查询,并附加动态拼接的条件,条件为enum类型的查询
因为查询条件不固定的原因,sql式的linq查询没法动态拼接条件. 网上搜的资料整理之后终于解决. 参考资料: enum使用 http://blog.csdn.net/slowlifes/articl ...
- EF写distinct
在日常开发中常常是这么写的 var logErrorRequest = from l in _logErrorRepository.Table select new { WrongTime = l.W ...
- EF 里的 join and Group Join
join ); pageCount = _db.Orders.Count(); return _db.Orders.OrderByDescending(c=>c.ID).Skip(skip).T ...
随机推荐
- KS光盘制作 for rhel6.5 and rhel7.2
############################## RHEL6.5 KS光盘制作--1.复制光盘到本地mkdir -p /opt/rhel6mount /dev/cdrom /mediacp ...
- 技巧:开启ubuntu系统桌面上的右键进入terminal命令行控制台功能
$ sudo apt-get install nautilus-open-terminal 执行上述命令,重启. 重启命令: $ sudo reboot 注意:需要联网
- 19. Remove Nth Node From End of List(C++,Python)
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- Yii2 urles
public function rules(){ return [ //必须填写 ['email, username, password,agree,verifyPassword,verifyCode ...
- 谷歌Chrome浏览器离线安装包
下载地址(自选版本) 链接: https://pan.baidu.com/s/1_gVP32tBNTR0pHhQbbM8Iw 密码: rmak 有能力的可以自行到下方地址下载: 最新稳定版:https ...
- ubuntu 修改hostname
1.sudo gedit /etc/hostname 2. 修改成你的新名字,例如 SS1 3. 保存,退出 3. sudo gedit /etc/hosts 4修改成心的名字 SS1 5. 保存,退 ...
- 转 python3中SQLLIT编码与解码之Unicode与bytes
#########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...
- vue 状态管理vuex(九)
通过props 及 $emit在父子组件通讯,对应频繁更新状态考虑使用vuex store.js export default { // 存储状态值 state: { count: 0 }, // 状 ...
- TCP/IP协议<二>
一.TCP/IP的标准化 1.TCP/IP的含义 一般来说,TCP/IP是利用IP进行通信时所必须用到的协议群的统称. 具体点,IP或ICMP.TCP或UDP.TELENT或FTP.以及HTTP等都属 ...
- `aclocal-1.10' is missing on your system
root@ubuntu31:~/linux-ftools-master# makecd . && /bin/bash /root/linux-ftools-master/missing ...