C# in查询
一、前言
在做项目中,我们会经常使用到 in 查询语句。那么如果我们用 EF 和 Linq 怎么写?接下来看代码
二、实例
我使用的是区域查询的例子,基本的 sql 语句如下:
SELECT * FROM Directories_AdministrativeDivision WHERE id IN ('5201','520102','520103','520111','520112','520113')
查询效果展示:

如果是 EF 查询:
我们要将 in 的数据封装为 list ,按我这的个例子的话,我是通过递归调用的方法,获取当 id=5201 下的所有区域。递归调用的方法如下。
//定义 set 列表
private HashSet<string> ids = new HashSet<string>(); /// <summary>
/// 递归获取区域id
/// </summary>
/// <param name="adId">用户的属地</param>
public void getAdId(string adId)
{
ids.Add(adId);
var ad2 = _administrativeDivisionRepository.GetAll().Where(x => x.ParentId == adId).ToList();
foreach (AdministrativeDivision a in ad2)
{
ids.Add(a.Id);
getAdId(a.Id);
}
}
EF 的 in 查询的代码如下:
public void SeachAdministrativeDivision() {
var ad = _administrativeDivisionRepository
.GetAll()
.Where(x => ids.Contains(x.Id));//这里就是 In 查询
}
如果是 Linq 的查询:
我们需要将获取的 list 变为 (‘xx’,‘xxx’)的样式,因为 Linq 查询和 SQL 语句是非常相似的。转化代码如下:
string[] array = ids.ToArray();
string str = "(";
for (int i = ; i < ids.Count; i++)
{
if (i == array.Length - )
{
str += "'" + array[i] + "')";
}
else
{
str += "'" + array[i] + "',";
}
}
Linq 的查询代码如下
var queryAdministrativeDivision = _administrativeDivisionRepository
.GetAll(); var query = from ad in queryAdministrativeDivision
where str.Contains(ad.Id) //这里是 in 查询
select ad;
最简单的办法,就是不用 in 查询,直接使用 ef 的应该属性,叫 Entity Framework 4.1 Linq Contains and StartsWith 就用可以了。
public void SeachAdministrativeDivision()
{
var ad = _administrativeDivisionRepository
.GetAll()
.Where(x => x.Id.StartsWith("52"));//StartsWith
}
三、小结
小结就是需要学习的东西还很多,我们需要更加的努力!
C# in查询的更多相关文章
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
- UWP 律师查询 MVVM
APP简介 律师查询是基于聚合数据的律师查询接口做的,这个接口目前处于停用状态,但是,由于我是之前申请的,所以,还可以用,应该是无法再申请了. 效果图 开发 一.HttpHelper 既然是请求接口的 ...
- Elasticsearch 5.0 中term 查询和match 查询的认识
Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...
- ASP.NET Aries 入门开发教程4:查询区的下拉配置
背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...
- ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区
前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...
- ExtJS 4.2 业务开发(二)数据展示和查询
本篇开始模拟一个船舶管理系统,提供查询.添加.修改船舶的功能,这里介绍其中的数据展示和查询功能. 目录 1. 数据展示 2. 数据查询 3. 在线演示 1. 数据展示 在这里我们将模拟一个船舶管理系统 ...
- 深入理解MySql子查询IN的执行和优化
IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- 【初学python】使用python连接mysql数据查询结果并显示
因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
随机推荐
- Kristen Grauman
http://www.cs.utexas.edu/~grauman/ CV Publications Code Data Short ...
- ubuntu 单网卡双 ip
局域网一套物理网络里有两个 ip 段,单网卡设置多 ip 可实现同时访问两个网段. $ cat /etc/network/interfaces # interfaces(5) file used by ...
- 启动app-inspector报Internal Server Error
前言 应用工具app-inspector可以协助定位IOS版App的控件元素,然鹅启动时报Internal Server Error! 解决办法 一.找到XCTestWD项目 目录: /usr/loc ...
- (转)c#(wince)中使用多线程访问winform中控件的问题
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...
- Kafka理论学习
Kafka Consumer设计解析 http://www.jasongj.com/2015/08/09/KafkaColumn4/
- 发布镶嵌数据集,服务端Raster Function制作
1.新建GDB 2.GDB里右键,New 镶嵌数据集. 3.向镶嵌数据集中添加风速TIF. 4.利用原样式,导出一个函数模板. 导出是XML. 5.发布ImageService服务时,在Functio ...
- Program received signal SIGSEGV, Segmentation fault.
GDB调试的时候出现了: Program received signal SIGSEGV, Segmentation fault.(程序收到信号SIGSEGV,分段故障) SIGSEGV:在POSIX ...
- BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 题目意思:给出 一个从1~N 的排列你和指定这个排列中的一个中位数m,从这个排列中找出长度为奇数 ...
- codeforces 652C C. Foe Pairs(尺取法+线段树查询一个区间覆盖线段)
题目链接: C. Foe Pairs time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- python中format()方法格式化字符串
format()是python2.6新增的一个格式化字符串的方法,功能非常强大,有可能在未来完全替代%格式化方法,相比 % ,format()的优点有: 1 .格式化时不用关心数据类型的问题,form ...