SQL基础查询和LINQ集成化查询是怎样的

SQL基础查询和LINQ集成化查询是怎样的

SQL基础查询和LINQ集成化查询是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

SELECT

SELECT 语句用于从表中选取数据,是 SQL 最基本的操作之一。

SQL基础查询和LINQ集成化查询是怎样的

通过 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 ... ANDBETWEEN ... 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

SQLC#
INContains
EXISTSAny
NOT EXISTSAll

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 的速度快。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。

发布于 2022-01-17 22:03:06
收藏
分享
海报
0 条评论
37
上一篇:C++ Qt QColorDialog怎么使用 下一篇:MyBatis怎么配置多个别名typeAliasesPackage
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码