Linq替换字段的子查询

问题描述:

我有一个数据库包含用户和角色。表中的用户具有对表角色的引用,因为每个用户都绑定到一个角色(只有一个)。 当我使用LINQ来检索用户时,字段“角色”在数据网格中显示为一个整数(这是表角色的主键)。但是,我想用角色表的实际名称字段替换用户的字段角色。任何想法如何做到这一点?Linq替换字段的子查询

datacontext的代码现在是默认的,我应该用什么linq查询来获得我需要的?

public IQueryable<Usuarios> GetUsuarios() 
{ 
     return this.ObjectContext.Usuarios; 
} 
+0

如果你正在使用实体框架/ LINQ来做任何事情,可以这样标记它。 – 2010-01-29 11:40:36

的规范的方式做这将是为您的数据网格视图特定的模型,并使用LINQ选择成特定于视图的模型。我的例子假定LINQ to SQL。

public IEnumerable<UserWithRoles> GetUsersWithRoles() 
{ 
    return this.ObjectContext 
       .Users 
       .Select(u => new UserWithRole { Name = u.Name, ..., Role = u.Roles.First().Name }); 
} 
+0

只是与此有关的另一个问题。如果我使用这个解决方案,我仍然可以使用主/细节功能吗?我的意思是,如果我使用Grid上的SelectedItem来设置Detail控件,它会使用User还是UserWithRoles?如果是后者,我怎么能回到原来的用户? 谢谢! – brafales 2010-01-29 13:02:19

+0

我认为你只需要在数据源上标识正确的方法来返回一个具体的视图模型(或者实际的业务对象,如果它们是相同的)。请注意,您需要在您的主视图模型中包含ID(可能),该ID将对应于要检索的正确详细信息项。 – tvanfosson 2010-01-29 14:24:27

这样做是为了早期绑定角色的用户:

return this.ObjectContext.Usuarios.Include("Roles");