0

私のリポジトリ クラスでは、LinqToSqlリポジトリからデータを取得するために使用します (たとえば、私の例では Sql Server 2008)。結果データをPOCOオブジェクトに配置します。よく働く :)

ここで、POCOオブジェクトに子プロパティ (別のPOCOオブジェクトまたは IList) がある場合、そのデータを設定する方法を見つけようとしています。これを行う方法がよくわかりません。

これが私が持っているサンプルコードです。私が設定している最後のプロパティに注意してください。コンパイルされますが、「正しく」ありません。それはPOCOオブジェクトインスタンスではありません..そして、その最後の行をコーディングする方法がわかりません。

public IQueryable<GameFile> GetGameFiles(bool includeUserIdAccess)
{
    return (from q in Database.Files
            select new Core.GameFile
            {
                CheckedOn = q.CheckedOn.Value,
                FileName = q.FileName,
                GameFileId = q.FileId,
                GameType = (Core.GameType)q.GameTypeId,
                IsActive = q.IsActive,
                LastFilePosition = q.LastFilePosition.Value,
                UniqueName = q.UniqueName,
                UpdatedOn = q.UpdatedOn.Value,

                // Now any children....
                // NOTE: I wish to create a POCO object
                //        that has an int UserId _and_ a string Name.
                UserAccess = includeUserIdAccess ?
                    q.FileUserAccesses.Select(x => x.UserId).ToList() : null
            });
}

ノート:

  • Database.Files => ファイル テーブル。
  • Database.FilesUserAccess => FilesUserAccess テーブル .. どのユーザーが GameFiles / Files テーブルにアクセスできるか。

アップデート

私は今、子の結果をそれぞれのPOCOクラスに抽出するという提案を得ましたが、これはVisual Studio Debuggerクラスが言っていることです:-

代替テキスト

なぜそれはSystem.Data.Linq.SqlClient.Implementation.ObjectMaterializer<..>

.Convert<Core.GameFile>List<Core.GameFile>を含むではなく、 POCO's?

それが何であるか/私が間違ったことを何か提案はありますか?

更新 2:

これは、子データをそれぞれの poco に抽出するために私が行ったことです..

// Now any children....
UserIdAccess = includeUserIdAccess ? 
    (from x in q.FileUserAccesses
     select x.UserId).ToList() : null,
LogEntries = includeUserIdAccess ? 
    (from x in q.LogEntries
     select new Core.LogEntry
     {
         ClientGuid = x.ClientGuid,
         ClientIpAndPort = x.ClientIpAndPort,
         // ... snip other properties
         Violation = x.Violation
     }).ToList() : null
4

2 に答える 2

1

あなたがする必要があるのは、ここに別のLinqクエリを入れることだけだと思います:

q.FileUserAccesses.Select(x => x.UserId).ToList()

つまり、FileUserAccess レコードからデータを選択したい場合 - これは Linq to SQL クラスであると想定しているため、次のようなものを使用できます。

(from fua in q.FileUserAccesses
select new PocoType
{
   UserID = fua.UserID, 
   Name = fua.User.UserName // Not sure at this point where the name comes from
}).ToList()

これにより、少なくとも正しい方向に向けられるはずです。

于 2009-11-16T13:15:42.033 に答える
0

UserIdAccess のタイプは何ですか? どうして「正しくない」のでしょうか? 「間違った」データを取得していますか? もしそうなら、データベースを直接チェックして、「正しい」データがそこにあることを確認しましたか?

于 2009-11-16T12:59:52.920 に答える