Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架的右外部联接_C#_Entity Framework_Linq - Fatal编程技术网

C# 使用实体框架的右外部联接

C# 使用实体框架的右外部联接,c#,entity-framework,linq,C#,Entity Framework,Linq,我不熟悉实体框架。请帮我回答以下问题 我有两个表,用户和公司,我需要在用户表上进行一个正确的外部联接 这是我现在拥有的 List<Company> users = DbContext.Companies .Where(p => !p.User.IsDeleted) .Include(p=> p.User)

我不熟悉实体框架。请帮我回答以下问题

我有两个表,用户和公司,我需要在用户表上进行一个正确的外部联接

这是我现在拥有的

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

    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

如果我没有理解错你,那么以下方法:

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();
List users=DbContext.companys
.Include(p=>p.User)
.Where(p=>!p.User.IsDeleted&&p.User.CompanyId==p.CompnayId)
.OrderBy(p=>p.User.FirstName)
.ToList();

List users=DbContext.users.Include(p=>p.Company).Where(p=>!p.IsDeleted&&p.CompanyId==p.CompanyId.ToList();
您可以像

List<User> users = DbContext.Users.Include(p => p.Company).Where(p => !p.IsDeleted).ToList();
List users=DbContext.users.Include(p=>p.Company).Where(p=>!p.IsDeleted).ToList();
它将加载用户和公司。若用户映射到任何公司,EF也将加载公司。如果用户未映射到任何公司,则公司属性将保持空。

以下是我的解决方案:

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()

它只带来内部连接结果,而不是预期的正确外部连接。您希望得到什么结果?不删除用户公司明智吗?对吗?我想从用户表中检索所有用户,而不考虑公司表,其中用户表中Isdeleted的标志应为false。感谢更新。我的方法是代码优先。所以,它的确切功能是,在用户实体中,我只需要它的字段,如Firstname、lastname、Isdeleted等。在公司实体中,我有一些类似于下面的公共虚拟用户User{get;set;}。所以我不得不像上面那样提问。如果有道理,请告诉我。我使用的查询工作得很完美,但问题是,它只是作为一个内部连接工作。我看到类似的东西。加入,我不知道如何使用它。你一定会得到解决方案!什么是键,两个表之间的关系?显示您的示例数据,您的期望是什么?您的示例数据似乎没有显示用户和公司表,只有一个表。此外,预期结果显示的数据不在示例数据中。再试一次。是的,但是使用
join
语句不应以牺牲使用导航属性为代价进行升级。我们可以在join中包含导航属性检查上面我修改的代码。我的意思是,您应该删除
join
语句。如果使用include,查询将生成内部连接。EF core 2.1中的另一种方法是使用导航属性创建视图,并使用view和add include
List<User> users = DbContext.Users.Include(p => p.Company).Where(p => !p.IsDeleted).ToList();
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()