Linq到sql查询多重继承

Linq到sql查询多重继承,linq,linq-to-sql,Linq,Linq To Sql,这是数据库架构: 我有这个问题,我试图只从同样属于GroupB的Group表中获取数据,所以我使用!g、 IdGroup.Equals(a.IdGroup)用于排除GroupA数据。 我检查了GroupA和GroupB ID是否在Group表中,但我仍然从这两个表中获取数据。我怎样才能解决这个问题?对不起,我的英语很差,sql/linq知识也很差 var result = from a in db.GroupA from r in db.Registration

这是数据库架构:

我有这个问题,我试图只从同样属于GroupB的Group表中获取数据,所以我使用
!g、 IdGroup.Equals(a.IdGroup)
用于排除GroupA数据。 我检查了GroupA和GroupB ID是否在Group表中,但我仍然从这两个表中获取数据。我怎样才能解决这个问题?对不起,我的英语很差,sql/linq知识也很差

var result = from a in db.GroupA
             from r in db.Registration
             join g in db.Group on r.IdGroup equals g.IdGroup
             where !g.IdGroup.Equals(a.IdGroup)
             select new {
                 g.Name
             };

看着林克,不应该是这样吗

var result = from a in db.GroupA
             join r in db.Registration on a.IdGroup equals r.IdGroup             
             join g in db.Group on r.IdGroup equals g.IdGroup
             where !g.IdGroup.Equals(a.IdGroup)
             select new {
                 g.Name
             };

我认为您正在寻找的是一个与非IN,IN-SQL等价的查询,也就是说,一个如下所示的查询:

SELECT
    g.name
FROM
    Group g
WHERE
    g.IdGroup NOT IN (SELECT IDGroup FROM GroupA);
var result = from g in db.Group
             where !(from a in GroupA select a.IdGroup).Contains(g.IdGroup)
             select new {
                 g.Name
             };
那看起来像你想要的吗

在这种情况下,等效LINQ可以如下实现:

SELECT
    g.name
FROM
    Group g
WHERE
    g.IdGroup NOT IN (SELECT IDGroup FROM GroupA);
var result = from g in db.Group
             where !(from a in GroupA select a.IdGroup).Contains(g.IdGroup)
             select new {
                 g.Name
             };
希望有帮助