eSql中的多个连接查询

时间:2010-06-18 13:38:16

标签: entity-framework

这是我在stackoverflow中的第一个问题,但实际上并不是第一次在这里获得解决方案。我正在努力与实体框架4中的多个连接。我有三个表(帐户,用户和AccountUsers),发现很难查询。

我想要的是获取所提供的accountId的所有用户,包括帐户创建者。我可以毫无问题地获得所有帐户用户,但对我来说困难的是获得帐户创建者,因为它没有添加到AccountUsers表中。下面是表格相关的快速预览。

帐户

  • ACCOUNTID
  • UserId(帐户创建者)
  • ......其他栏目

用户

  • 用户ID
  • ......其他栏目

AccountUsers

  • ACCOUNTID
  • 用户ID

我更喜欢查询是esql,但Linq to Entities会这样做。

我相信你们在stackoverflow,所以我知道这不会花很长时间来获得'答案'标记。

感谢您阅读。

1 个答案:

答案 0 :(得分:0)

如果我正确地读你的问题,你不是在寻找一个像工会一样的联盟吗?我不确定esql,但我认为以下Linq查询应该有效。也许它会让你朝着正确的方向前进(或者我可能完全脱离基础或遗漏某些东西):

var users = (from accountUser in db.AccountUsers
             where accountUser.AccountId == myAccountId
             select accountUser.UserId)
            .ToList()
            .Add((from account in db.Accounts
                  where account.AccountId == myAccountId
                  select account.UserId)
                 .Single());

要使其延迟加载,您始终可以创建一个使用foreachyield return的方法:

IEnumerable<int> GetAccountUsers(int AccountId)
{
    //return the users
    foreach(var userId in (from accountUser in db.AccountUsers
                           where accountUser.AccountId == myAccountId
                           select accountUser.UserId))
        yield return userId;

    //return the owner too
    yield return (from account in db.Accounts
                  where account.AccountId == myAccountId
                  select account.UserId)
                 .Single();
}

出于好奇,为什么主人没有被添加到AccountUsers表中?