当前位置:  开发笔记 > 数据库 > 正文

如何进行SubTable的LINQ外连接?

如何解决《如何进行SubTable的LINQ外连接?》经验,为你挑选了1个好方法。

我有一个这种类型的设置数据表.

表A.

AID     AName
---------------------
1       A_Name1
2       A_Name2
3       A_Name3

表B.

BID     BName
---------------------
10      B_Name1
20      B_Name2
30      B_Name3

表C.

AID     BID
---------------------
1       10
2       10
2       20
2       30
3       20
3       30

我想使用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

什么是LINQ等效?

请假设我有相应的A,B和C表的对象.



1> Amy B..:

对于LinqToSql,数据库优化器将适当地处理这个问题.使用"不是任何"模式.

IQueryable query =
  db.BTable
    .Where(b => !db.CTable
      .Where(c=> c.AID == 1)
      .Any(c => c.BID == b.BID)
    )

对于LinqToObjects,我们不想枚举BList中每个项目的CList.做一次枚举.

List BIDList = CList
  .Where(c => c.AID == 1)
  .Select(c => c.BID)
  .ToList();
IEnumerable query = BList
  .Where(b => !BIDList.Contains(b.BID));

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有