SQL基础查询和LINQ集成化查询是怎样的
SQL基础查询和LINQ集成化查询是怎样的
SQL基础查询和LINQ集成化查询是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
SELECT
SELECT 语句用于从表中选取数据,是 SQL 最基本的操作之一。
通过 SELECT 查询的结果被存储在一个结果表中(称为结果集)。
SQL SELECT 语法
只查询某个列的数据:
SELECT[列名称]FROM[表名称]
查询所有列的数据
SELECT*FROM[表名称]
SQL
查询所有数据
SELECT*FROMcategories
查询一列或多列
SELECTcategory_id,category_nameFROMcategories
查询表达式
varlist=fromcategoriesincontext.Categoriesselectnew{categories.CategoryId,categories.CategoryName};varlists=fromcategoriesincontext.Categoriesselectcategories;
查询语句
varlist=context.Categories.Select(categories=>new{categories.CategoryId,categories.CategoryName});varlists=context.Categories.Select(categories=>categories);
SQL SELECT DISTINCT 语句
DISTINCT 可以去除查询结果集中完全相同的项,只有每一个列中每一个数据都相同,才能被认为是“完全相同”。
可在 categories 表中添加相同数据的项进行测试(除主键外相同)。
SQL
SELECTDISTINCTcategory_id,category_nameFROMcategories
查询表达式
vardislist=list.Distinct();vardislist2=(fromcategoriesincontext.Categoriesselectnew{categories.CategoryId,categories.CategoryName}).Distinct();
查询语句
vardislist=list.Distinct();vardislist2=context.Categories.Distinct().Select(categories=>new{categories.CategoryId,categories.CategoryName});
WHERE 和 操作符
用于条件筛选。
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
BETWEEN 和操作符
BETWEEN ... AND
或BETWEEN ... OR
C# 中可以使用&&
或||
表示。
SQL
SELECT[列名称]FROM[表名称]WHERE[列][运算符][值]
SELECTcategory_id,category_nameFROMcategoriesWHEREBETWEENcategory_id>1ANDcategory_id<5
查询表达式
varlist3=fromcategoriesincontext.Categorieswherecategories.CategoryId>1&&categories.CategoryId<5selectcategories;
查询语句
varlist3=context.Categories.Where(x=>x.CategoryId>1&&x.CategoryId<5);
LIKE 和通配符
在 SQL 中,可使用以下通配符:
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何单一字符 |
SQL
SELECT*FROMcategoriesWHEREcategory_namelike'B%'
查询表达式
varlist4=fromcategoriesincontext.Categorieswherecategories.CategoryName.StartsWith("B")selectcategories;
不能直接使用 %。
查询语句
varlist4=context.Categories.Where(x=>x.CategoryName.StartsWith("B"));
Linq 只有 Startwith 、 Endwith 和 Contains,没有其它通配符。
而 EF中提供了EF.Functions.Like()
来进行通配符操作。
例如:
varlist5=fromcategoriesincontext.CategorieswhereEF.Functions.Like(categories.CategoryName,"B_")selectcategories;
varlist5=context.Categories.Where(x=>EF.Functions.Like(x.CategoryName,"B_"));
更多通配符操作,请自行了解EF.Functions.Like()
。
ORDER BY 排序
SQL
SELECT*FROMcategoriesORDERBYcategory_id
C#
varlist6=(fromcategoriesincontext.Categoriesselectcategories).OrderBy(c=>c.CategoryId);varlist7=fromcategoriesincontext.Categoriesorderbycategories.CategoryIdselectcategories;
varlist6=context.Categories.OrderBy(x=>x.CategoryId).ToList();varlist7=context.Categories.ToList().OrderBy(x=>x.CategoryId);
TOP
PostgreSQL 中没有 TOP,可以使用 OFFSET、LIMIT 代替。
SELECTselect_listFROMtable_expression[ORDERBY...][LIMIT{number|ALL}][OFFSETnumber]
Top(5) 的表达
SELECT*FROMtestORDERBYtestLIMIT5
或者
SELECT*FROMtestOFFSET0LIMIT5
一般与 Order by 一起使用
SELECT*FROMtestORDERBYtestOFFSET5LIMIT5
LIMIT ALL
的效果和省略LIMIT
子句一样,例如下面的 SQL 或获取全部数据。
SELECT*FROMtestLIMITALL--等价SELECT*FROMtest
C#代码中,则相应使用 Take 、 Skip。
varlist=(fromcincontext.UserRolesselectc).Skip(0).Take(5);
varlist=context.UserRoles.Skip(0).Task(5);
例外:
T-SQL 中的 Top(1) ,在 PostgreSQL 中,可以表示
SELECT*FROMtestLIMIT1
而 C# 表示:
varlist00=(fromcincontext.UserRolesselectc).First();varlist01=(fromcincontext.UserRolesselectc).FirstOrDefault();varlist02=(fromcincontext.UserRolesselectc).Take(1);varlist10=context.UserRoles.First();varlist11=context.UserRoles.FirstOrDefault();varlist12=context.UserRoles.Take(1);
可以使用 First() 或 FirstOrDefault() 返回查询结果中的第一条数据,方法体中不加条件,相当于Top(1)
。
TakeWhile 和 SkipWhile
TakeWhile
运行查询,直到某一条件成立才停止获取;即当条件成立时,才会停止。
SkipWhile
运行查询,直到某一条件成立才停止跳过;即当条件成立时,才会开始。
In
与 Where 一起使用,表示符合条件中的一个。
SELECT*FROMtestWHEREtestIN('1','2')
SELECT*FROMtestWHEREtestNOTIN('1','2')
C# 中用 Contains 表示
string[]item=newstring[]{"a","b","c"};varlist=fromcincontext.UserRoleswhereitem.Contains(c.RoleId)selectc;
varlist2=context.UserRoles.Where(x=>item.Contains(x.RoleId));
Alias(as)
SQL 中,可以给查询的列设置别名,例如
SELECTtestastttttFROMtest
C#中,应该无直接如此的操作。
不过,很多操作形式最后生成的 SQL 都会出现 AS。
EXISTS 和 NOT EXISTS
SQL | C# |
---|---|
IN | Contains |
EXISTS | Any |
NOT EXISTS | All |
EXISTS
判断子查询中是否有结果集返回,如果有即为 TRUE。
子查询中应当有 where 等条件
SELECT*FROMtestEXISTS({子查询})
EXISTS 并不关注 子查询中返回了什么、返回了多少结果集,它只判断有没有结果返回(查询返回的结果集,行数>0)。
例如
SELECT*FROMtestEXISTS(SELECT1FROMtestwheretest=="a")
C#
使用 .Any()
varlist=fromsincontext.UserRoleswhere(fromcincontext.UserRolesselectc).Any()selects;
varlist2=context.UserRoles.Where(x=>context.UserRoles.Any());
Any() 中也可以加条件
varlist=fromsincontext.UserRoleswhere(fromcincontext.UserRolesselectc).Any(x=>x.RoleId!="x")selects;
varlist2=context.UserRoles.Where(x=>context.UserRoles.Any(x=>x.RoleId!="x"));
NOT EXISTS
无结果集返回则为,没有返回则为 TRUE。
子查询中应当有 where 等条件判断。
Linq 的 拓展方法 All,表示每一个元素是否都符合条件。返回 Bool。。
varlist=fromsincontext.UserRoleswherecontext.UserRoles.All(x=>x.RoleId=="a")selects;
varlist2=context.UserRoles.Where(x=>context.UserRoles.All(x=>x.RoleId=="x"));
In 比 EXISTS 的速度快。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
推荐阅读
-
实用microsoft(sql server 7 教程 怎么配置sqlserver的远程连接)
怎么配置sqlserver的远程连接?SQLServer2008默认是不愿意远程桌面的,如果不是想在本地用SSMS连接远战服务器...
-
如何使用 SQL Server FILESTREAM 存储非结构化数据?
-
安全攻防六:SQL注入,明明设置了强密码,为什么还会被别人登录
-
利用PHP访问MySql数据库以及增删改查实例操作
关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作PHP访问MySql数据库˂?php//造连...
-
SQL注入速查表
-
「Web安全」SQL注入的基石
-
每个互联网人才都应该知道的SQL注入
-
MySQL中防止SQL注入
喜欢本文章请关注点赞加转发如何保护数据免受SQL注入攻击?采取措施保护数据免受基于应用程序的攻击,例如SQL注入。千...
-
mybatis中如何防止sql注入和传参
-
SQL注入之环境搭建(二)-PHP+Mysql注入环境搭建