Entity framework 4 如何使用linq将多个表外部连接到实体
我正在使用ASP.NET MVC 3和实体框架CodeFirst 我有两门课,如下: 问题: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
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)
});
}
}