0

使用我的 Repository 类,我用来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 回答