Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将扁平的关系数据行放入C#类?_C#_Sql Server_Entity Framework_Entity Framework 6 - Fatal编程技术网

如何将扁平的关系数据行放入C#类?

如何将扁平的关系数据行放入C#类?,c#,sql-server,entity-framework,entity-framework-6,C#,Sql Server,Entity Framework,Entity Framework 6,我有一个使用Entity Framework的应用程序,但据我所知,如果联接不在主键上,最新的Entity Framework仍然无法联接表 因此,我有一个C#代码,它调用一个连接一些表并返回数据的存储过程。这是我问题的简化版本 我有一个返回问题数据的关系数据库。如果有一个问题有五个答案,那么将返回五行,每行将具有相同的问题信息 以下是数据要进入的类: public partial class Result1 { public Guid QuestionUId { get; set; }

我有一个使用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; } 
}
我需要的是获取这些关系数据并创建问题类的集合:

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; } 
}
公共部分类问题
{
公共Guid问题UID{get;set;}
公共字符串文本{get;set;}
公共字符串答案{get;set;}
公共ICollection答案{get;set;}
}
公共部分类答案
{
public int AnswerId{get;set;}
公共字符串应答文本{get;set;}
}
有人能给我一些想法吗?我如何获得数据并将其放入问题类中,以便正确填充答案字段

以下是我目前掌握的情况:

 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
var sql=@“dbo.sp_get_questions@UserId,
@UserTestId;“;
SqlParameter[]参数=新的SqlParameter[]
{
新的SqlParameter(“@UserId”,Int32.Parse(User.Identity.GetUserId()),
新的SqlParameter(“@UserTestId”,UserTestId)
};
尝试
{
var query=db.Database.SqlQuery(sql,参数);
var questions1=wait query.ToListAsync();
变量问题2=问题1
.选择((t,索引)=>新建
问题是我根本不知道如何做。选择,甚至我是否采取了正确的方法


希望有人能帮助我。

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

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

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

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

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

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

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

这将导致出现一组问题,其中每个问题都有一组答案。

EF并不需要外键进行连接。如果没有外键,它不会创建导航属性。但你应该问问自己,为什么要进行一个一开始不涉及外键的连接。EF不需要外键外键进行连接。如果没有外键,它就不会创建导航属性。但是你应该问问自己,为什么要进行一个不包含外键的连接。EF并不需要外键来进行连接。如果没有外键,它就不会创建导航属性。但是你可以你应该问问自己,为什么你要做一个一开始就不涉及外键的连接。并不是EF需要外键来进行连接。如果没有外键,它不会创建导航属性。但是你应该问问自己,为什么你要做一个一开始就不涉及外键的连接。谢谢你的帮助nswer。但是,这不会导致从数据库返回大量行吗?您可以始终在查询中添加Where子句以限制返回的行。感谢您的回答。但是,这不会导致从数据库返回大量行吗?您可以始终按顺序在查询中添加Where子句限制返回的行。感谢您的回答。但是,这不会导致从数据库返回大量行吗?您可以始终在查询中添加Where子句以限制返回的行。感谢您的回答。但是,这不会导致从数据库返回大量行吗?您可以始终在查询中添加Where子句以限制返回的行。