从两个实体访问属性

时间:2011-03-23 21:26:25

标签: asp.net-mvc linq linq-to-sql linq-to-entities

我创建了两个实体并且它们具有导航属性。

 var list = from u in storeDB.Users
            join a in storeDB.Accounts
            on u.Id equals a.Id
            select new { u, a };

如果我做了

foreach( user in list){
   <span>user.Name, user.Money</span>
}

它不起作用。我的问题是如何显示两个表的结果属性中的内容,即连接??

Users: has Name, Id
Accounts: has Id, Money

3 个答案:

答案 0 :(得分:0)

匿名对象上的属性为ua,因为您已将它们命名为。你可能想给他们更好的名字,或者更好的是,只需选择你感兴趣的属性。我会给他们明确的名字,但你可以省略,如果你想要的名称与属性名称相同,并且没有任何冲突。

var list = from u in storeDB.Users
           join a in storeDB.Accounts
           on u.Id equals a.Id
           select new { Name = u.Name, Money = a.Money };

然后将它们用作

foreach( user in list){
     <span>user.Name, user.Money</span>
}  

答案 1 :(得分:0)

尝试including the related objects

e.g。

var list = storeDB.Users.Include("Accounts");

答案 2 :(得分:0)

我怀疑您在MVC视图中使用它,因此您需要为组合的用户和帐户对象创建一个视图模型,并在模型中发送一个Enumerable。

public class UserAccountVM{
    public Account Acct { get; set; }
    public User Usr { get; set; }
}

然后在你的查询中执行以下操作:

var list = from u in storeDB.Users            
           join a in storeDB.Accounts            
           on u.Id equals a.Id            
           select new UserAccountVM { Usr = u, Acct = a };

将列表作为模型传递。您的观点应该是强类型的; IEnumerable<UserAccountVM>应该有效。然后在您的视图中执行此操作:

foreach( user in list){   
    <span>user.Usr.Name, user.Acct.Money</span>
}