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