Linq查询 - 加入2个表

时间:2015-09-16 12:46:33

标签: c# linq join

我想在两张桌子之间进行连接,如图所示。

Join between SITE and CONFIGURE

我刚开始使用C#。

这就是我已经完成的事情:

var sitesDB = from sites in this.lSites
    from configure in sites.CONFIGURECollection
    where sites.ID == configure.SITE_ID
    select sites.KEY;

它不能正常工作。

并且:

var sitesDB = from sites in this.lSites
    from configure in sites.CONFIGURECollection
    join config in this.lSites on sites.ID equals config.ID
    select sites.KEY;

不工作。

这里是lSites的声明:

public List<SITE> lSites { get; private set; }

我想进行此连接,因为我必须根据此连接在表中添加列。 谢谢 ! :)

2 个答案:

答案 0 :(得分:2)

根据您可能尝试的可能性,我有三种可能的解决方案:

  1. SITE和CONFIGURE是数据库或存储中的不同表。然后,您应该引用这两个表,并且您的查询将如下所示(假设CONFIGURE表被引用为lconfigure):

    var sitesDB = from site in lsites
                  join config in lconfigure on sites.ID equals config.ID
                  select site.Key;
    
  2. 但是,如果您只有一个站点列表作为您的声明示例显示然后查看您的查询似乎尝试执行的操作,那么您实际上是在找到所有引用具有相同ID的配置的站点之后。此查询将执行此操作:

    var sitesDB = from site in lsites
                  where site.CONFIGURECollection.Where(x => x.ID == l1.ID).FirstOrDefault() != null
                  select site.Key;
    
  3. 根本问题在于您尝试将每个网站上的表加入所有网站。如果你想这样做,你可以先将所有CONFIGURECollection:s添加到一个列表中并使用它。

    var lconfigure = new List<CONFIGURE>();
    foreach (var site in sites)
    {
        lconfigure.AddRange(site.CONFIGURECollection);
    }
    
  4. 之后,您使用我列出的第一个查询。

答案 1 :(得分:0)

你想要这样的东西:

from sites in this.lSites
join configure in sites.CONFIGURECollection on sites.ID equals configure.SITE_ID
select sites.key;