使用我的 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