EF 多种查询方式
比较常用的查询方式linq to entity,这里先看一种写法:
var query = (from d in testContext.Set<DepartPerson>()
//查询和sql很像,不过这里注意,查询多条件不是and
where == && == && ==
select new Dep_Person
{
Name = p.Name,
ID = p.ID
}).ToList()
当然还有另外一种写法,改用lambda表达式查询:
var personIDList = testContext.Set<Person>().Where(p=>p.Name=="张三").Select(d=>new {ID=d.ID,Name=d.ID}).ToList();
实际应用中我们经常会碰到多表关联查询,以及多条件查询,下面看一下代码 怎么写:
var query = (from d in testContext.Set<DepartPerson>()
join p in testContext.Set<Person>()
on new { id = d.PersonID, hosID = d.HospitalID } equals new { id = p.ID, hosID = "" }
where == && == && ==
select new Dep_Person
{
Name = p.Name,
ID = p.ID,
DepID = d.ID,
HosID = d.HospitalID }).ToList();
实际上也可以用lambda表达式
var personIDList = testContext.Set<Person>().Where(p=>p.Name=="张三").Select(d=>new {ID=d.ID,Name=d.ID}).ToList();
var list = testContext.Set<DepartPerson>().Where(d => personIDList.Contains(d.PersonID)).ToList();
还有一些操作,orderby 和groupby 这些和sql语句的很像,也容易理解,不再多说,这里说一下去重,官方提供的去重方法Distinct()是针对所有列去重,但是很多时候,如果我们想针对某一列去重,应该怎么做呢
方法一:利用groupby
var list = query.ToList().GroupBy(c => c.Name).Select(x => x.First()).ToList();
方法二:实现第三方扩展
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{ HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
方法二使用也很简单
var query = (from d in testContext.Set<DepartPerson>()
join p in testContext.Set<Person>()
on new { id = d.PersonID, hosID = d.HospitalID } equals new { id = p.ID, hosID = "" }
where == && == && ==
select new Dep_Person
{
Name = p.Name,
ID = p.ID,
DepID = d.ID,
HosID = d.HospitalID }).DistinctByAll(c=>c.Name).ToList();
掌握了这些方法,日常得查询业务需求应该能满足了,当然如果你自己想自定义sql查询(拼接sql语句)可以这么做
List<Dep_Person> peopleViews = testContext.Database.SqlQuery<Dep_Person>("SELECT Name, ID FROM Person").ToList();
这种方法注意的是,加入参数最好是格式化参数,不要直接拼接,以防sql注入
EF 多种查询方式的更多相关文章
- Elasticsearch学习之多种查询方式
1. query string search 搜索全部商品:GET /ecommerce/product/_search took:耗费了几毫秒 timed_out:是否超时,这里是没有 _shard ...
- EF数据Linq方式查询
using (var ctx = new NorthwindEntities()) { //单表查询SQL查询方式 //SELECT * FROM Customers AS c WHERE c.Cit ...
- EF联合查询,如何设置条件过滤从表数据
最近在使用EF进行联合查询过程中,遇到了一件不开心的事情. 已禁用懒加载 var post = await _repository.GetMyPostById(blogId, postId).AsNo ...
- IBatis.Net学习笔记五--常用的查询方式
在项目开发过程中,查询占了很大的一个比重,一个框架的好坏也很多程度上取决于查询的灵活性和效率.在IBatis.Net中提供了方便的数据库查询方式. 在Dao代码部分主要有两种方式:1.查询结果为一个对 ...
- 匿名类型 使用泛型T linq返回dynamic类型的匿名实体 如何把匿名类型.GetType()返回的对象传进泛型里面 EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题
[100分]紧急求助:LinQ下使用IQueryable<T>如何将返回类型<T>使用匿名类型 问题描述如下:我有一个方法如下:public IQueryable Dissen ...
- mysql笔试题大餐---1、组合查询方式及having
mysql笔试题大餐---1.组合查询方式及having 一.总结 一句话总结: 实践:我之前的mysql真的学的太浅了,这种情况下,依据实践(做题)才是唯一能把它学好的方式 学的暂时够了,以实践而学 ...
- C#高性能TCP服务的多种实现方式
哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...
- C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍
在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一 ...
- Hibernate 查询方式(HQL/QBC/QBE)汇总
作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...
随机推荐
- Exp3 免杀原理与实践 20164321 王君陶
Exp3 免杀原理与实践 20164321 王君陶 1实验要求 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分), ...
- 协程IO多路复用
协程:单线程下实现并发并发:伪并行,遇到IO就切换,单核下多个任务之间切换执行,给你的效果就是貌似你的几个程序在同时执行.提高效率任务切换 + 保存状态并行:多核cpu,真正的同时执行串行:一个任务执 ...
- ES六
来自:http://es6.ruanyifeng.com/#docs/style 1,=> // bad console.log([1,2,3,4].map(function(x){return ...
- Linux 套接字通信笔记(一)
协议 TCP(传输控制协议),UDP(用户数据包协议)为传输层重要的两大协议,向上为HTTP提供底层协议,向下为数据链路层封装底层接口,乃是通信重中之重.TCP是面向流传输的协议,在编程中形象化为St ...
- pythonweb框架Flask学习笔记03-变量规则
#-*- coding:utf-8 -*- from flask import Flask app=Flask(__name__) @app.route('/post/<int:postid&g ...
- 【BZOJ3217】ALOEXT 分块
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3217 分块过掉辣!!!!!!$O(n^{1.5}+q\times \sqrt{n})$的 ...
- POJ 1063
#include <iostream> using namespace std; int main() { //freopen("acm.acm","r&qu ...
- Vue-router的基本使用
Vue-router的基本使用 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta ...
- [转]C# 理解lock
原文:http://www.cnblogs.com/apsnet/archive/2012/07/08/2581475.html 一. 为什么要lock,lock了什么? 当我们使用线程的时候,效率最 ...
- Android Studio打开非本机项目比较慢的问题。
使用Android Studio打开其他项目的时候,如果使用的AS版本.gradle不同的话,会在打开项目的时候下载gradle版本,网速不好的情况下回非常的慢. 解决方案: 1.将本机创建的AS项目 ...