使用Entity框架的右外连接

时间:2017-06-02 06:50:02

标签: c# entity-framework linq

我是Entity Framework的新手。请帮我解决以下问题。

我有2个表,用户和公司,我需要在Users表上进行正确的外连接。

这就是我现在所拥有的。

List<Company> users = DbContext.Companies                        
                    .Where(p => !p.User.IsDeleted)
                    .Include(p=> p.User)
                    .OrderBy(p => p.User.FirstName)
                    .ToList();

请帮帮我。 TIA。

关系是User.id = Company.Companyid

样本数据

Name         Role             Userid         Companyid
Test1 Test1  User             210            210
Test2 Test2  User             1034           1034
Test3 Test3  Company Admin    2594           2594
Test4 Test4  Company Admin    5139           5139

预期结果

    Name            Role            Userid    Companyid
    Test1 Test1     User            210       210
    Test2 Test2     User            1034      1034
    Test3 Test3     Company Admin   2594      2594
    Test4 Test4     Company Admin   5139      5139
    Test5 Test5     Super Admin     1         Null

3 个答案:

答案 0 :(得分:1)

这是我的解决方法:

var usercompany = from u in dbcontext.User  
             join c in DbContext.Companies.Include(c=>c.User) 
             on u.id equals c.id into cu 
             from co in cu.DefaultIfEmpty() 
             select new   
             {
                u.id,
                co.id
             };
var result= usercompany.ToList()

答案 1 :(得分:0)

您可以像

一样查询
List<User> users = DbContext.Users.Include(p => p.Company).Where(p => !p.IsDeleted).ToList();

它将加载用户和公司。如果用户被映射到任何公司,EF也将加载公司。如果用户未映射到任何公司,则公司属性将保持为空。

答案 2 :(得分:-1)

如果我没有理解你的错误,那就在下面:

List<Company> users = DbContext.Companies   
                     .Include(p=> p.User)                     
                     .Where(p => !p.User.IsDeleted && p.User.CompanyId == p.CompnayId)                  
                     .OrderBy(p => p.User.FirstName)
                     .ToList();

OR

List<User> users = DbContext.Users.Include(p => p.Company).Where(p => !p.IsDeleted && p.CompanyId == p.Company.CompanyId).ToList();