Entity framework 4 如何使用linq将多个表外部连接到实体

Entity framework 4 如何使用linq将多个表外部连接到实体,entity-framework-4,linq-to-entities,code-first,Entity Framework 4,Linq To Entities,Code First,我正在使用ASP.NET MVC 3和实体框架CodeFirst 我有两门课,如下: 问题: public class Question { public int ID { get; set; } public Target Target { get; set; } public string QuestionText { get; set; } public Category Category { get; set; } public QuestionT

我正在使用ASP.NET MVC 3和实体框架CodeFirst

我有两门课,如下:

问题:

public class Question
{
    public int ID { get; set; }
    public Target Target { get; set; }
    public string QuestionText { get; set; }
    public Category Category { get; set; }
    public QuestionType QuestionType { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
    public Unit Unit { get; set; }
}
我还有这个ViewModel:

public class QuestionViewModel
{
    public int ID { get; set; }
    public string Question { get; set; }
    public string QuestionType { get; set; }
    public string Target { get; set; }
    public string Category { get; set; }
    public string Unit { get; set; }
    public List<Answer> Answers { get; set; }
}
但这当然不会滚动,因为a不是答案列表,而是一个答案


如何重写查询以获取集合中的所有答案,或包含正确问题的所有答案,同时接受空答案列表?

下面这样的子查询如何

public class DataRepository
{
    public List<Question> Questions { get; set; }
    public IEnumerable<Answer> Answers { get; set; }

}


public class QandA
{

    DataRepository dr = new DataRepository();

    public void QueryQuestion(int id)
    {
        var question = (from q in dr.Questions
                        where q.ID == id

                        select new QuestionViewModel()
                        {
                            ID = q.ID,
                            Question = q.QuestionText,
                            Answers = (from a in dr.Answers 
                                        where a.Question == q
                                        select a)
                        });
    }

}

}下面这样的子查询怎么样

public class DataRepository
{
    public List<Question> Questions { get; set; }
    public IEnumerable<Answer> Answers { get; set; }

}


public class QandA
{

    DataRepository dr = new DataRepository();

    public void QueryQuestion(int id)
    {
        var question = (from q in dr.Questions
                        where q.ID == id

                        select new QuestionViewModel()
                        {
                            ID = q.ID,
                            Question = q.QuestionText,
                            Answers = (from a in dr.Answers 
                                        where a.Question == q
                                        select a)
                        });
    }

}

}

您好,谢谢您的快速回复,我正在尝试解决我的代码当时有点混乱,但我正在整理。它编译得很好,看起来可以胜任这项工作。但是,如果我没有答案怎么办?ToList会发生什么?我一直在得到这个。。有什么想法吗?LINQ to Entities无法识别“System.Collections.Generic.List1[Project.Models.Answer]ToListSystem.Collections.Generic.IEnumerable1[Project.Models.Answer]”方法,此方法无法转换为存储表达式。在存储库中,如果将列表答案转换为IEnumerable答案,该怎么办;然后不调用ToList函数,查询将运行。然后,如果您以后需要列表的功能性,您可以在Linq to Entities查询之外使用Answers.ToList。您好,我或多或少做了您所说的,但我得到一个例外:无法创建“Project.Models.Answer”类型的常量值。在此上下文中仅支持基本类型“如Int32、String和Guid”。我没法想清楚这件事。。这次也有线索吗?对象不能枚举吗?若要解决此问题,请尝试在联接上使用实体的属性,而不是整个实体。例如,连接到Id字段而不是实体上的目标。示例'join t in db.Targets on q.Target.TargetId等于t.TargetIdHi感谢您的快速回复,我现在正在尝试我的代码当时有点混乱,但我正在整理它。它编译得很好,看起来可以胜任这项工作。但是,如果我没有答案怎么办?ToList会发生什么?我一直在得到这个。。有什么想法吗?LINQ to Entities无法识别“System.Collections.Generic.List1[Project.Models.Answer]ToListSystem.Collections.Generic.IEnumerable1[Project.Models.Answer]”方法,此方法无法转换为存储表达式。在存储库中,如果将列表答案转换为IEnumerable答案,该怎么办;然后不调用ToList函数,查询将运行。然后,如果您以后需要列表的功能性,您可以在Linq to Entities查询之外使用Answers.ToList。您好,我或多或少做了您所说的,但我得到一个例外:无法创建“Project.Models.Answer”类型的常量值。在此上下文中仅支持基本类型“如Int32、String和Guid”。我没法想清楚这件事。。这次也有线索吗?对象不能枚举吗?若要解决此问题,请尝试在联接上使用实体的属性,而不是整个实体。例如,连接到Id字段而不是实体上的目标。示例“将t连接到q.Target.TargetId上的db.Targets等于t.TargetId”
public class DataRepository
{
    public List<Question> Questions { get; set; }
    public IEnumerable<Answer> Answers { get; set; }

}


public class QandA
{

    DataRepository dr = new DataRepository();

    public void QueryQuestion(int id)
    {
        var question = (from q in dr.Questions
                        where q.ID == id

                        select new QuestionViewModel()
                        {
                            ID = q.ID,
                            Question = q.QuestionText,
                            Answers = (from a in dr.Answers 
                                        where a.Question == q
                                        select a)
                        });
    }

}