Dav*_*rab 1 .net join linq-to-sql
我有一个这种类型的设置数据表.
表A.
AID AName
---------------------
1 A_Name1
2 A_Name2
3 A_Name3
Run Code Online (Sandbox Code Playgroud)
表B.
BID BName
---------------------
10 B_Name1
20 B_Name2
30 B_Name3
Run Code Online (Sandbox Code Playgroud)
表C.
AID BID
---------------------
1 10
2 10
2 20
2 30
3 20
3 30
Run Code Online (Sandbox Code Playgroud)
我想使用LINQ编写一个查询,对于给定的A的ID,我给出了不在表C中的B列表.
因此,对于1的AID,我希望BID为20和30.
对于AID为3,我希望BID为10
对于2的AID,没有任何返回任何返回.
我知道SQL会
SELECT
B.BID
FROM B
LEFT OUTER JOIN C ON C.BID = B.BID AND A.AID = 1
-- AID would change based on which I was looking for, 1, 2, or 3
Run Code Online (Sandbox Code Playgroud)
什么是LINQ等效?
请假设我有相应的A,B和C表的对象.
对于LinqToSql,数据库优化器将适当地处理这个问题.使用"不是任何"模式.
IQueryable<B> query =
db.BTable
.Where(b => !db.CTable
.Where(c=> c.AID == 1)
.Any(c => c.BID == b.BID)
)
Run Code Online (Sandbox Code Playgroud)
对于LinqToObjects,我们不想枚举BList中每个项目的CList.做一次枚举.
List<int> BIDList = CList
.Where(c => c.AID == 1)
.Select(c => c.BID)
.ToList();
IEnumerable<B> query = BList
.Where(b => !BIDList.Contains(b.BID));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |