2011-04-08 131 views
0
private void OnSearchExecute(IQueryable<SurveySearchCriteria> query) 
    { 
     SurveySearchCriteria ssc=query.Where(a => a.CriteriaString == "LastName").SingleOrDefault(); 

     string format = ssc.WhereClause; 
     string args= string.Format(".{0}(\"{1}\")", SelectedSearchType, EnteredSearchCriteria); 

     string returnval = string.Format(format, args);   




     ReadmissionTrackingApplication.Server.Services.SurveysDomainContext _context = 
           new ReadmissionTrackingApplication.Server.Services.SurveysDomainContext(); 

     EntityQuery<ReadmitPatientList> eq = _context.GetReadmitPatientListByCriteriaQuery(returnval); 

     var lo= _context.Load<ReadmitPatientList>(eq); 

使用此代码它不会填充我的实体。 我有一种感觉,因为我没有使用回调,但查询在linqpad中工作得很好。linq动态查询未填充集合

returnval =“PatientLastName.Contains(\”test \“)”“并且当我将它插入到linqpad中时它就起作用。

ReadmitPatientList.AsQueryable()。其中​​( “PatientLastName.Contains(\” 测试\ “)”)

这里是的DomainService查询...

public IQueryable<Data.ReadmitPatientList> GetReadmitPatientListByCriteria(string formattedCriteriaString) 
     { 
      var query = this.ObjectContext.ReadmitPatientList.AsQueryable() 
          .Where(a => a.OriginalAdmitDate >= new DateTime(2010, 01, 01)) 
          .Where(formattedCriteriaString); 

      return query; 

     } 

我的问题是,为什么是这样的在linqpad中工作,但不在我的代码中。我使用silverlight,所以可能是因为没有回调。这是我第一次进入webbasede编程,因此我仍然习惯于所有错综复杂的事情......

+0

任何异常? – Slauma 2011-04-08 23:31:26

回答

0

这是一个回调问题。我重构了我的代码,以便它实现回调函数并清理Domainservice调用,现在它可以工作。

客户服务:

public void getReadmitPatientList(System.Action<ICollection<ReadmitPatientList>> callback, string searchCriteria) 
     { 
      var q = _context.GetReadmitPatientListByCriteriaQuery(searchCriteria); 
      _context.Load<ReadmitPatientList>(q, OnReamitPatientListLoaded, callback); 
     } 

     public void getReadmitPatientList(System.Action<ICollection<ReadmitPatientList>> callback, int days) 
     { 
      DateTime CurrentDate = DateTime.Today; 

      DateTime entryDate = CurrentDate.AddDays(-days); 

      var q = _context.GetReadmitPatientListQuery().Where(a => a.OriginalAdmitDate >= entryDate); 
      _context.Load<ReadmitPatientList>(q, OnReamitPatientListLoaded, callback); 

     } 

     public void OnReamitPatientListLoaded(LoadOperation<ReadmitPatientList> lo) 
     { 
      if (!lo.HasError) 
      { 
       ICollection<ReadmitPatientList> q = new ObservableCollection<ReadmitPatientList>(lo.Entities); 
       var action = (Action<ICollection<ReadmitPatientList>>)lo.UserState; 
       action.Invoke(q); 
      } 
      else 
      { 
       MessageBox.Show(string.Format("{1}{0}{2}", Environment.NewLine, lo.Error.Message, lo.Error.InnerException)); 

       lo.MarkErrorAsHandled(); 
      } 
     } 

域业务:

public IQueryable<Data.ReadmitPatientList> GetReadmitPatientListByCriteria(string formattedCriteriaString) 
    { 
     var query = this.ObjectContext.ReadmitPatientList.AsQueryable() 
         .Where(a => a.OriginalAdmitDate >= new DateTime(2010, 01, 01)) 
         .Where(formattedCriteriaString); 

     return query; 

    }