2011-03-01 107 views
1

下面的查询是不是从Visual Studio工作:的LINQ查询不填充子集合

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查询确实会返回子集合。经过一天的努力,我必须做些愚蠢的事情......请告诉我我的错误是什么......谢谢。

添加更多细节: 我使用的EF和RIA服务在Silverlight 4.0应用

我从我的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())); 
       } 

      } 

     } 

回答

0

这听起来像我this.ObjectContext.Questions不包含你认为它的作用。您是否尝试过运行

this.ObjectContext.Questions.Include("AnswerKey").Include("SurveyQuestions").ToList() 

...然后在结果列表中查找?这应该给你一个想法如何继续。 当然,关于.Include("SurveyQuestions")部分的mutatis mutandis部分。

+0

在Linqpad这个作品,但从我的EF Datacontext它不包括返回... – ecathell 2011-03-01 19:10:07

+0

愚蠢的RIA服务... bleh..it不是一个linq问题。我没有在元数据中使用[包含] – ecathell 2011-03-01 20:51:18

+0

@ecathell装饰的AnswerKey集合 - 嘿,我认为某些东西一定不能包含在某处。很高兴你解决了你的问题。 :) – 2011-03-01 21:04:22