如何获取关系数据的扁平行并将它们放入 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})
}
)
这将产生一组问题,其中每个问题都有一组答案。
我有一个正在使用 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})
}
)
这将产生一组问题,其中每个问题都有一组答案。