使用Linq使用ObservableCollection属性填充对象

时间:2012-08-24 23:15:32

标签: c# linq

我喜欢Linq但是我很喜欢它,我似乎总是忘记如何使用它。 我搜索但似乎无法找到合适的答案。 这是我的问题

我有两个表table_2有table_1的外键

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

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

现在我有一个对象(用户)我想填充userId和name_2以及table_2中所有userID行的ObservableCollection

对象样本:

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

感谢您的帮助和时间。

1 个答案:

答案 0 :(得分: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 - )