如何获取关系数据的扁平行并将它们放入 C# class?

How can I take flat rows of relational data and put these into a C# class?

我有一个正在使用 Entity Framework 的应用程序,但据我了解,如果连接不在主键上,最新的 Entity Framework 仍然无法连接表。

因此,出于这个原因,我有 C# 代码调用一个存储过程,该过程连接一些表和 returns 我的数据。这是我的问题的简化版本。

我有一个返回问题数据的关系数据库。如果一个问题有五个答案,那么将返回五行,每一行将具有相同的问题信息。

这是数据要进入的 class:

public partial class Result1
{
   public Guid QuestionUId { get; set; }
   public string Text { get; set; }
   public int AnswerId { get; set; }
   public string AnswerText { get; set; } 
}

我需要的是获取此关系数据并创建问题的集合 class:

public partial class Question
{
   public Guid QuestionUId { get; set; }
   public string Text { get; set; }
   public string Answer { get; set; }
   public ICollection<Answer> Answers { get; set; }

}

public partial class Answer 
{
   public int AnswerId { get; set; }
   public string AnswerText { get; set; } 
}

有人可以给我一些想法,我可以如何获取数据并将其放入问题 class 以便正确填充答案字段吗?

这是我目前的情况:

 var sql = @"dbo.sp_get_questions @UserId,        
                                  @UserTestId;";
        SqlParameter[] parameters = new SqlParameter[]
                    {
                        new SqlParameter("@UserId", Int32.Parse(User.Identity.GetUserId())),
                        new SqlParameter("@UserTestId", userTestId)
                    };
        try
        {
            var query = db.Database.SqlQuery<Result1>(sql, parameters);
            var questions1 = await query.ToListAsync();
            var questions2 = questions1
            .Select((t, index) => new

问题是我不知道如何做 .Select ,即使我采用了正确的方法。

希望有人能帮助我。

如果您对 EF 的加入方式不满意,您仍然可以创建自己的。我不确定你的数据是如何构建的,但你可以这样写:

context.Questions
.GroupJoin
(
    context.Answers,
    x=>x.Id, // this is the pk on Questions
    x=>x.QuestionId //this is the fk on Answers
    (q,a)=>new Question
    {
        q.QuestionUId,
        q.Text,
        Answers = a.Select(an=>new Answer{an.AnswerId,an.AnswerText})
    }    
)

这将产生一组问题,其中每个问题都有一组答案。