C# 如何将此LinqToSql数据提取到POCO对象中?

C# 如何将此LinqToSql数据提取到POCO对象中?,c#,.net,linq-to-sql,poco,C#,.net,Linq To Sql,Poco,对于我的存储库类,我使用LinqToSql从存储库中检索数据(例如,在我的示例中是SQLServer2008)。我将结果数据放入POCO对象中。作品很棒:) 现在,如果我的POCO对象有一个子属性(这是另一个POCO对象或一个IList),我将尝试找出填充该数据的方法。我只是不太确定怎么做 这是我的一些示例代码。请注意我设置的最后一个属性。它可以编译,但不是“正确的”。它不是POCO对象实例。。我不知道最后一行怎么编码 public IQueryable<GameFile> GetG

对于我的存储库类,我使用
LinqToSql
从存储库中检索数据(例如,在我的示例中是SQLServer2008)。我将结果数据放入
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
            });
}

UserIdAccess的类型是什么?为什么它不是“正确的”?你是否得到了“错误”的数据?如果是这样的话,您是否直接检查了数据库以确保“正确”的数据存在?

我认为您需要做的就是在此处放置另一个Linq查询:

q.FileUserAccesses.Select(x => x.UserId).ToList()
i、 e.您希望从FileUserAccess记录中选择数据,我假设这些记录是Linq到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()

这至少可以让您指向正确的方向。

这是不对的,因为我没有创建任何poco类。这是一个简单的例子,即。。我刚收到一份INT的清单。如果我想得到一份(poco)foo的名单怎么办?我看不出你的建议怎么行。。因为到主父实例的连接在哪里?您的代码将返回FileUserAccess表中的所有行。我只需要父表(表文件)中存在的行。。对于父L2S查询将返回的每一行。根据您给出的代码,我希望在Linq to SQL模型中反映的数据库中的文件和用户访问之间存在FK关系-因此在Linq查询中,q.FileUserAccess是表示“子”的FileUserAccess记录的可枚举集合文件q的用户访问记录。它不会(不应该!)返回所有的行,因为我们只选择那些由特定文件的File和FileUserAccess之间的关系定义的记录。真棒:)我完全错过了'q.FileUserAccess'位,只是认为这是一个新的查询,而不是扩展现有的查询!嗯,很有趣。现在更新了初始帖子Murph。我可以检查一下吗?我们解决了初始问题了吗?我认为您可能返回的是查询而不是结果(很难说,因为我们看不到修改后的代码…?)是的,它返回的是查询(方法),但这应该是个问题,对吗?或者这就是问题所在?我不应该创建一个.ToList(),因为这会导致它“执行”?我认为这可能是问题所在-您通过POCO对象返回的是IQueryable,而不是任何具体的东西。退一步,运行查询以获得具体结果,即,您需要一个代码量最少的测试应用程序,以允许您播放并查看查询的评估结果。
(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()