1

私はLinqが大好きですが、それを吸っています.私はいつもそれを使用する方法を忘れているようです. 検索しましたが、適切な答えが見つからないようです。これが私の質問です

私は2つのテーブルを持っています table_2 は table_1 の外部キーを持っています

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

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

今、私はオブジェクト(ユーザー)を持ってい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);

ご協力ありがとうございました。

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 に答える