以下查询在 Visual Studio 中不起作用:
var query = this.ObjectContext.Questions.Include("AnswerKey").Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == 3));
但是在 linqPad 中,它的工作方式就像它应该使用的那样:
Questions
.Include("AnswerKey")
.Where(o=>o.SurveyQuestions.Any(o2=>o2.SurveyID==3)).Dump();
该查询正在加载它应该加载的问题,但它没有加载 AnswerKeys 的子集合。但是 linqpad 查询确实返回子集合。在为此挣扎了一天之后,我必须做一些愚蠢的事情......请告诉我我的错误是什么......谢谢。
添加更多细节: 我在 Silverlight 4.0 应用程序中使用 EF 和 RIA 服务
我正在从我的 DomainServiceClass 的部分类执行此代码
public IQueryable<Data.Questions> GetQuestionsbySurveyId(int id)
{
//var query = this.ObjectContext.Questions.Include("AnswerKey").Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == id));
// var query = this.ObjectContext.Questions.Include("AnswerKey").Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == 3));
var query= this.ObjectContext.Questions.Include("AnswerKey").Include("SurveyQuestions");
//var query = this.ObjectContext.Questions;
Debug.WriteLine(((ObjectQuery)query).ToTraceString());
return query;
}
我不知道这是否真的有什么不同。linqpad 查询使用与此相同的 EF 数据上下文。我已经验证生成的 SQL 是一样的。在客户端将其作为 EntityQuery 返回是否重要?
private void ReceiveNewQuestionairreRequest(fnReadmitPatientList_Result request)
{
CurrentSelectedPatient = request;
var context = new SurveysDomainContext();
EntityQuery<Questions> query = context.GetQuestionsbySurveyIdQuery(3);
context.Load(query, SurveyQuestions_Loaded, null);
//context.Load(q, AnswerKey_Loaded, null);
}
private void SurveyQuestions_Loaded(LoadOperation<Questions> lo)
{
if (!loHasError(lo))
{
QuestionsCollection = new ObservableCollection<Questions>(lo.Entities);
foreach (Questions q in QuestionsCollection)
{
Debug.WriteLine(String.Format("{0} {1} - Available Answers= {2}", q.ID, q.Text, q.AnswerKey.Count()));
}
}
}