2009-10-26 5 views
0

다음 결과를 필터링 할 수있는 람다 식을 전달할 수 있으며 결과 목록에서 작동하는 콜백 메서드를 사용할 수 있습니다. 이것은 내 시스템에서 하나의 특정 테이블 일 뿐이며, 나는이 구조를 반복해서 사용할 것이다. 일반적인 방법, 예를 들어 테이블을 매개 변수 (공정하게 ADO.NET dataservice 엔티티)로 취하고 필터 (람다 표현식)를 전달하는 DBget을 빌드 할 수 있습니다. 이것일반 및 데이터베이스 액세스

public void getServiceDevelopmentPlan(Expression<Func<tblServiceDevelopmentPlan, bool>> filter, Action<List<tblServiceDevelopmentPlan>> callback) 
     { 
      var query = from employerSector in sdContext.tblServiceDevelopmentPlan.Where(filter) 
         select employerSector; 


      var DSQuery = (DataServiceQuery<tblServiceDevelopmentPlan>)query; 
      DSQuery.BeginExecute(result => 
      { 
       callback(DSQuery.EndExecute(result).ToList<tblServiceDevelopmentPlan>()); 

      }, null); 

    } 

내 첫 배쉬는 다음과 같습니다

public delegate Action<List<Table>> DBAccess<Table>(Expression<Func<Table, bool>> filter); 

답변

0

당신이 Ado.NET DataServices에 또는 WCF DataServices에 Linq에를 사용하는 경우, 모델은 당신에게 입력을 많이 만들 것이다. 일반적으로 선택하고 필터링합니다. 그런 다음 모든 방법이의 맨 위에 바로 사탕이며, 다음이 필요합니다

쿼리 유형 1

- 하나 개의 필터는 목록을 반환합니다 - 하나 개의 필터, 하나를 반환

public void makeQuery<T>(string entity, Expression<Func<T, bool>> filter, Action<List<T>> callback) 
    { 
     IQueryable<T> query = plussContext.CreateQuery<T>(entity).Where(filter); 

     var DSQuery = (DataServiceQuery<T>)query; 
     DSQuery.BeginExecute(result => 
     { 
      callback(DSQuery.EndExecute(result).ToList<T>()); 
     }, null); 

    } 

쿼리 유형 (2) 엔티티 :

은 무엇 당신이해야 할 것은 이들과의 과부하 {

 IQueryable<T> query = plussContext.CreateQuery<T>(entity).Where(filter); 
     var DSQuery = (DataServiceQuery<T>)query; 
     DSQuery.BeginExecute(result => 
     { 
      callback(DSQuery.EndExecute(result).First<T>()); 
     }, null); 

    } 

공공 무효 makeQuery (문자열 개체, 표현> 필터, 액션 콜백)입니다

필터의 간단한 배열을위한 필터를 wap해라.

Expression<Func<T, bool>>[] filter 

그리고 싱글과리스트 리턴을 위해 반복한다.

하나의 datacontext를 원한다면 싱글 톤으로 번들하거나 일종의 하이브리드 팩토리/싱글 톤에서 컨텍스트 배열을 추적하면 멀리 떨어져 있습니다. 생성자가 컨텍스트를 취하도록하거나 그렇지 않은 경우 자체 생성자를 사용하면 멀리 떨어져 있습니다.

GenericQuery.Instance.Create().makeQuery<tblAgencyBranches>("tblAgencyBranches", f => f.tblAgencies.agencyID == _agency.agencyID, res => { AgenciesBranch.ItemsSource = res; }); 

이 복잡해 보일 수 있지만 비동기 마법을 많이 숨기고, 특정 경우에 버튼 핸들러에서 직접 호출 할 수 있습니다 : 다음 한 곳에서 큰 라인을 제외한 모든에 이것을 사용

. 별로 3 단 시스템은 아니지만 엄청난 시간을 절약합니다.

관련 문제