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 ...
随机推荐
- SpringSecurity学习笔记(一):搭建最简单的SpringSecurity应用
学习过程参考自:http://www.mossle.com/docs/auth/html/pt01-quickstart.html 一.搭建Maven项目: 所需引用的jar包如下: pom.xml文 ...
- java transient关键字(转载)
博客来源:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html Volatile修饰的成员变量在每次被线程访问时,都强迫从主 ...
- IOS UIScrollView滚动到指定位置
[mScrollView setContentOffset:CGPointMake(0,200) animated:YES];
- extjs中新建窗体时,给窗体添加背景图片不显示问题之一
1.在extjs中新建窗体时,给窗体添加背景图片不显示,例如下面的代码. 不显示的原因:因为设置了 layout: 'fit', Ext.create('Ext.Window', { title: ...
- java之异常的捕获及处理
在java中程序的错误主要是语法错误和语义错误(也就是逻辑错误). java中异常处理语句的格式: try{ //有可能出现异常的语句 }catch(异常类 异常对象){ //编写异常的处理语句 }c ...
- 【操作系统】使用BCD工具安装Ubuntu操作系统
Ubuntu14.04作为目前最新版本的ubuntu系统,相信很多人都想在自己的电脑上安装一下,然而系统的安装方法各式各样,U盘法.grub引导法等等,本文将介绍在win7系统下用easyBCD软件建 ...
- Impala 安装笔记2一hive和mysql安装
l 安装hive,hive-metastore hive-server $ sudo yum install hive hive-metastore hive-server l 安装mysql ...
- appium():PageObject&PageFactory
Appium Java client has facilities which components to Page Object design pattern and Selenium PageFa ...
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- CSS Overflow 属性清除浮动
清除浮动 设置overflow的一个更流行的用处是,说也奇怪,清除浮动.设置overflow并不会在该元素上清除浮动,它将清除自己(self-clear).意思就是,应用了overflow(auto或 ...