Sql中not exists, 如何用linq表示
答案:3 悬赏:0
解决时间 2021-01-26 04:13
- 提问者网友:放下
- 2021-01-25 19:38
Sql中not exists, 如何用linq表示
最佳答案
- 二级知识专家网友:梦中风几里
- 2021-01-25 19:58
用Contains()方法;
首先获取t2.id这个对象假如这个id=2
假如表是User
var item=from u in ctx.user where u.id=2;
再判断bool isexists= ctx.user.Contains(item);
追问:可不可以就一条语句搞定呢,期待你高人
追答:你就是查询一条数据是否在数据库中存在对不对?
那就这样啊
var item=from u in ctx.user where u.uid=你在页面上获取的id啊
如果不存在的这条数据的话,item会为null的
首先获取t2.id这个对象假如这个id=2
假如表是User
var item=from u in ctx.user where u.id=2;
再判断bool isexists= ctx.user.Contains(item);
追问:可不可以就一条语句搞定呢,期待你高人
追答:你就是查询一条数据是否在数据库中存在对不对?
那就这样啊
var item=from u in ctx.user where u.uid=你在页面上获取的id啊
如果不存在的这条数据的话,item会为null的
全部回答
- 1楼网友:毛毛
- 2021-01-25 22:04
不会,纯支持,加贴track。
- 2楼网友:街头电车
- 2021-01-25 21:30
你要说完全一样,那是不太可能的。
第一,你的语句本身就有优化空间。
你的和如下的sql 等效:
select * from table1 as t1
where not Exists(select null from table2 where t1.id=t2.id)
如上可减少内存空间交换输出。
------------------------------------------------------------------
linq:如下是检索没有明细的订单,跟你的要求一样. 你改成t1 t2 就行了
from x in Orders
where!Order_Details.Any(t => t.Detail_Order_ID != x.Order_NO)
select x
如上转化成的sql是:
SELECT [t0].[order_ID] AS [Order_ID], [t0].[order_NO] AS [Order_NO]
FROM [Order] AS [t0]
WHERe NOT (EXISTS(
SELECt NULL AS [EMPTY]
FROM [Order_Detail] AS [t1]
WHERe [t1].[detail_Order_ID] <> [t0].[order_NO]
))
----------
如上的写法应该够水准。回头给我多加红包哦!
追问:高人,我可不可以理解成这样,
from x in t1
where!t2.Any(t => t.id != x.id)
select x
另:
1)!t2.Any()是什么意思?
2)t => 是什么意思?
追答:from x in t1
where!t2.Any(t => t.id != x.id)
select x
你这个要改成==
from x in t1
where!t2.Any(t => t.id == x.id)
select x
以上代表
---
SQL 里有some any all 等 这个很基础的理论。
以上代表!t2.Any() t2 中的任意记录都不满足。
t =>这不是 lambda表达式么!linq的基础。linq本身也是方法树
怎么回事?问linq 却不认识linq的基础方法
第一,你的语句本身就有优化空间。
你的和如下的sql 等效:
select * from table1 as t1
where not Exists(select null from table2 where t1.id=t2.id)
如上可减少内存空间交换输出。
------------------------------------------------------------------
linq:如下是检索没有明细的订单,跟你的要求一样. 你改成t1 t2 就行了
from x in Orders
where!Order_Details.Any(t => t.Detail_Order_ID != x.Order_NO)
select x
如上转化成的sql是:
SELECT [t0].[order_ID] AS [Order_ID], [t0].[order_NO] AS [Order_NO]
FROM [Order] AS [t0]
WHERe NOT (EXISTS(
SELECt NULL AS [EMPTY]
FROM [Order_Detail] AS [t1]
WHERe [t1].[detail_Order_ID] <> [t0].[order_NO]
))
----------
如上的写法应该够水准。回头给我多加红包哦!
追问:高人,我可不可以理解成这样,
from x in t1
where!t2.Any(t => t.id != x.id)
select x
另:
1)!t2.Any()是什么意思?
2)t => 是什么意思?
追答:from x in t1
where!t2.Any(t => t.id != x.id)
select x
你这个要改成==
from x in t1
where!t2.Any(t => t.id == x.id)
select x
以上代表
---
SQL 里有some any all 等 这个很基础的理论。
以上代表!t2.Any() t2 中的任意记录都不满足。
t =>这不是 lambda表达式么!linq的基础。linq本身也是方法树
怎么回事?问linq 却不认识linq的基础方法
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯