gpt4 book ai didi

.net - 如何从 Linq2Sql 查询填充 POCO(子)IList 属性?

转载 作者:行者123 更新时间:2023-12-02 12:17:32 25 4
gpt4 key购买 nike

我有两门课:

public class Question
{
public IList<Answer> Answers { get; set; }
}

public class Answer
{ .. }

在我的 Linq2Sql 设计器中,设计器上有两个 L2S 对象,它们之间有正确的 0<->many 箭头。基尔。

我不确定如何在一次调用中检索这些问题/答案并填充我的 POCO 对象..

这就是我所拥有的......有人可以填补空白吗?

public IQueryable<Question> GetQuestions()
{
return from q in _db.Questions
select new Question
{
Title = q.Title,
Answers = ???????? // <-- HALP! :)
};
}

想法?

更新:POCO 之战

感谢您的回复,但还没有 100% 完成。

首先,我返回 POCO 类,而不是 Linq2Sql 上下文类。这就是我这样做的原因...

select new Question { .. };

该类是 POCO,而不是 linq2sql。

其次,我喜欢指向执行 Answers = q.Answers.ToList() 的答案,但这也不起作用,因为它试图将 Linq2Sql 类设置为 POCO 类。

最佳答案

如果 LINQ to SQL 类之间存在关系,则应该在“问题”LINQ to SQL 类上生成“答案”属性。所以你应该能够简单地做到这一点:

return from q in _db.Questions
select new Question
{
Title = q.Title,
Answers = q.Answers.ToList(),
}

您也许可以省略对 ToList() 的调用 - 我不确定 LINQ to SQL 用于生成相关行的类型(我相信是 IQueryable<T> )。

要强制预先填充 Answers 属性,而不是为每个问题触发另一个查询,您可以使用 DataLoadOptions类(class)。本质上,您可以告诉 LINQ to SQL 在您查询问题时加载答案(使用 LoadWith 方法 - 请参阅 MSDN 文档)。

编辑

你是对的 - 因为你的 Question.Answers 属性是你自己的 POCO 列表,所以用 q.Answers 分配它并不是正确的方法。这可能会更好:

return from q in _db.Questions
select new Question
{
Title = q.Title,
Answers = (from a in q.Answers
select new Answer { ... }).ToList(),
}

关于.net - 如何从 Linq2Sql 查询填充 POCO(子)IList 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/370664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com