Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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# LINQ连接查询中的列表_C#_Linq_Join - Fatal编程技术网

C# LINQ连接查询中的列表

C# LINQ连接查询中的列表,c#,linq,join,C#,Linq,Join,我在使用LINQ时遇到了一个问题,我想知道在存储库中是否有一个快速的代码解决方案 GetCompletePackQuestion(int id) { var query = from q in DbSet where q.id == id join a in DbContext.Set<answers>() on id equals a.question_id join cc in

我在使用LINQ时遇到了一个问题,我想知道在存储库中是否有一个快速的代码解决方案

GetCompletePackQuestion(int id)
    {
        var query = from q in DbSet where q.id == id
                    join a in DbContext.Set<answers>() on id equals a.question_id
                    join cc in DbContext.Set<correct_answers>() on id equals cc.question_id
                    select new CompletePackModel
                    {
                        Id = q.id,
                        Question = q.question,
                        CorrectAnswer = cc.answers.id,
                        Answers = q.answers.Select(ans => ans.answer)
                    };

        return query.SingleOrDefault();
    }
GetCompletePackQuestion(int-id)
{
var query=来自DbSet中的q,其中q.id==id
在id等于a.question\u id的DbContext.Set()中加入一个
在id等于cc.question\u id的DbContext.Set()中加入cc
选择新的CompletePackModel
{
Id=q.Id,
问题,
CorrectAnswer=cc.answers.id,
Answers=q.Answers.Select(ans=>ans.answer)
};
返回query.SingleOrDefault();
}
CompletePackModel将Answers属性作为字符串列表。。 所以问题是:一个问题有很多答案,所以当q.id是一个int时,问题是一个字符串,答案是一个id(实际上我应该取表中与该id相连的字符串)。。。最后一个答案应该是一个列表

有没有办法解决这个问题

谢谢



为什么它在查询中给我3个结果而不是1个?

我假设您使用的是实体框架(基于我看到的DbContext对象)。在这种情况下,你的问题类应该已经有了答案的集合。然后,您需要执行以下操作:

select new CompletePackModel
{
  Id = q.id,
  Question = q.question,                            
  CorrectAnswer = from answ in DbContext.Set<answers>() where answ.id == a.id select answ.answer,
  Answers = q.answers.Select(a => a.answer).ToList()
};
选择新的CompletePackModel
{
Id=q.Id,
问题,
CorrectAnswer=来自DbContext.Set()中的answ,其中answ.id==a.id选择answ.answer,
Answers=q.Answers.Select(a=>a.answer).ToList()
};

这会奏效吗

var query = from q in DbContext.Set<questions>()
                join a in DbContext.Set<answers>() on q.id equals a.question_id
                join cc in DbContext.Set<correct_answers>() on q.id equals cc.question_id
                select new CompletePackModel
                {
                    Id = q.id,
                    Question = q.question,                            
                    CorrectAnswer = cc.answer,
                    Answers = DbContext.Set<answers>().Where(answ => answ.question_id == q.id).ToList()
                };
var query=来自DbContext.Set()中的q
在q.id上的DbContext.Set()中加入a等于a.question\u id
在q.id等于cc.question\u id的DbContext.Set()中加入cc
选择新的CompletePackModel
{
Id=q.Id,
问题,
CorrectAnswer=cc.answer,
Answers=DbContext.Set().Where(answ=>answ.question_id==q.id).ToList()
};

是的,有q.answers,但有entityobject..但我只需要该实体的字符串字段。。。我需要一个字符串列表…编辑以获取字符串(我假设这是
a.answer
,当然)我在同一代码中遇到问题。。。它给了我3个结果,而不是一个查询结果。这不应该是…问题。。。在应用SingleORDefault之前。。。它应该只是一个对象。。。因为只有一个问题……嗯。。这似乎不起作用。。。无论如何,在连接的出口处,我已经有了一组a(答案)来回答这个问题。。。从该组中,我应该去掉字符串字段……您已经在DbContext.Set()中加入了cc
CorrectAnswer
结果字段。他们应该一起去吗?