2012-08-24 60 views
1

我喜欢Linq但是吸取它,我似乎总是忘记如何使用它。 我搜索,但似乎找不到合适的答案。 这里是我的问题用Linq填充一个ObservableCollection属性的对象

我有TABLE_2具有TABLE_1的外键

table_1 
---------- 
- userID 
- Name 

tabel_2 
---------- 
- userID 
- ownID 
- codeKey 

现在我有一个对象(用户),我想与用户id和名称来填充和所有的ObservableCollection一两个表在TABLE_2用户ID行

对象的示例:

public class User 
{ 
    public string Name { get; set; } 
    public long UserID { get; set; } 

    public ObservableCollection<Message> Messages { get; set; } 
} 

public class Message 
{ 
    public string CodeKey { get; set; }  
    public long OwnID { get; set; } 
    public long UserID { get; set; } 
} 

我试着做以下;它的工作原理,但不知道它是否是正确的方式:

var request = from tb1 in db.table_1 
       select new User() 
       { 
        Name = tb1.Name,         
        UserID = tb1.UserID, 

        Messages = new ObservableCollection<Message>(
          from tb2 in db.table_2 
          where tb2.UserID == tb1.UserID 
          select new SmsMessage() 
          { 
           CodeKey=tb2.CodeKey, 
           OwnID = tb2.ownID,              
           UserID = tb2.UserID 
          }) 
       }; 
return new ObservableCollection<User>(request); 

谢谢你的帮助和时间。

+0

任何这方面的消息?你终于明白了吗? – zapico

回答

2

你可以用更简单的方法来做到这一点。如果你的实体已经和那些关系创建的,你应该能够做这样的事情:

var query = from tb1 in db.table_1.Include("table_2") 
      select tb1; 

查询将是一个IEnumerable的使用对象的名单,他们中的每一个将包含TABLE_1数据和属性与其对应的table_2对象。

所以你可以填充你的用户集合做一个简单的foreach循环。

如果你想只是一个LINQ查询做到这一点,你可以用这样的尝试:

var request = from tb1 in db.table_1.Include("table_2") 
         select new User() 
          { 
           Name = tb1.Name,         
           UserID = tb1.UserID, 

           Messages = tb1.table_2; 
          }; 


    return new ObservableCollection<User>(request); 

从来没有尝试过,所以我不知道这个解决方案8-)

相关问题