C# Linq到SQL-获取相关数据

C# Linq到SQL-获取相关数据,c#,entity-framework,linq-to-sql,entity-framework-6,C#,Entity Framework,Linq To Sql,Entity Framework 6,我有一些数据,我需要返回一些相关数据,并将其全部放在一个模型中。我在模型中设置了所有适当的字段,如下所示: public class ComputerModel { public int MachineId { get; set; } public int GroupId { get; set; } public int SoftwareVersionId { get; set; } public string GroupName { get; set; }

我有一些数据,我需要返回一些相关数据,并将其全部放在一个模型中。我在模型中设置了所有适当的字段,如下所示:

public class ComputerModel
{
    public int MachineId { get; set; }
    public int GroupId { get; set; }
    public int SoftwareVersionId { get; set; }
    public string GroupName { get; set; }
    public string SoftwareVersion { get; set; }
    public string IPAddress { get; set; }
    public string HostName { get; set; }
    public string MACAddress { get; set; }
    public string Title { get; set; }
    public bool IsIGMonitor { get; set; }
    public string UpTime { get; set; }
    public DateTime DateEntered { get; set; }
    public string EnteredBy { get; set; }
    public Nullable<DateTime> DateUpdated { get; set; }
    public string UpdatedBy { get; set; }
    public ICollection<MachineRole> MachineRoles { get; set; }
    public ICollection<Role> Roles { get; set; }
}
我可以让MachineRoles填充,但无法让角色填充。我尝试了
Roles=Rolz2
,但Rolz只返回Role的一个实例,而不是一个集合

如何使此查询返回机器以及机器角色和角色的相关数据

我看过以下文章,但运气不好:


更新
我注意到,如果删除模型并使用匿名类型,则不会出现任何错误:

select new ()
{
    GroupName = Groups.GroupName,
    ......
}).ToList();

但这对我的项目没有帮助,因为我需要使用数据模型

如果以上所有表都通过PK-FK关系关联,则可以使用linq lambda函数.Include()包含相关表,然后使用导航属性访问数据

如果表不相关,则可以使用LINQ左联接,如中所示


看起来您需要混合使用内部联接和左联接。上述示例仅实现内部联接。

此零件是否错误?:<代码>从MachineRoles.DefaultIfEmpty()中的MachineRoles.RoleId中的unitOfWork.Context.Roles中的r连接到Rolz中等于r.RoleId。如果我在MachineRoles上更改
,而不是在MachineRoles上更改
。RoleId等于r.RoleId转换成Rolz
->
则在MachineRoles上更改
。RoleId等于r.RoleId转换成Rolz
,然后我得到一个编译器错误
IEnumerable不包含“RoleId”的定义,也没有扩展方法“RoleId”比以往任何时候都更多地接受IEnumerable的第一个参数。我已经停止回答使用了
join
的问题,而期望导航属性似乎是合理的,因为不可能给出正确的答案。另外,LINQtoSQL并不是实体框架。感谢@GertArnold的输入。我将研究这篇文章,看看是否可以尝试一种新的方法。顺便说一句,我知道LINQ to SQL不是EF,我标记了EF以防有人不理解
上下文.TableName
语法。您标记EF是因为您使用EF,而不是使用LINQ to SQL。
select new ()
{
    GroupName = Groups.GroupName,
    ......
}).ToList();