2011-04-08 182 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; 

    }