1

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

我有两个表 table_2 有 table_1 的外键

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

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

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

对象样本:

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

感谢您的帮助和时间。

4

1 回答 1

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

于 2012-08-25T15:07:30.540 回答