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

时间:2015-03-23 17:31:30

标签: c# sql-server entity-framework entity-framework-6

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

因此,我有C#代码调用连接某些表并返回我的数据的存储过程。这是我的问题的简化版本。

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

以下是数据进入的类:

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

我需要的是获取此关系数据并创建Question类的集合:

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; } 
}

有人可以告诉我如何获取数据并将其放入Question类中以便Answers字段也正确填充吗?

这是我到目前为止所拥有的:

 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

问题是我不知道怎么做。选择,或者即使我采取了正确的方法。

希望有人可以帮助我。

1 个答案:

答案 0 :(得分:3)

如果您对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})
    }    
)

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