문제

람다 표현식으로 전달하여 결과를 필터링 한 다음 결과 목록에서 작동하는 콜백 메소드가 있습니다. 이것은 내 시스템의 특정 테이블 일뿐입니다.이 구성을 계속해서 사용할 것입니다. 테이블을 매개 변수 (ADO.NET DataService 엔티티)로 가져와 필터 (Lambda Expersion)로 전달하는 일반적인 방법을 구축 할 수있는 방법.

 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);
도움이 되었습니까?

해결책

LINQ에 ADO.NET DATASERVICES 또는 WCF DATASERVICES를 사용하는 경우 모델이 많은 유형을 구축합니다. 일반적으로 선택하고 필터링 할 것입니다. 다음이 필요합니다. 그러면 모든 방법은 이것의 맨 위에 사탕입니다.

쿼리 타입 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- 하나의 필터는 단일 엔티티를 반환합니다.

public void makeQuery (문자열 엔터티, 표현식> 필터, 액션 콜백) {

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

    }

당신이해야 할 일은 이것들을 과부하하고 간단한 필터 배열을 위해 필터를 교체하는 것입니다.

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

단일 및 목록 반품에 대해 반복합니다.

하나의 데이터 컨텍스트를 원한다면 이것을 싱글 톤에 묶거나 어떤 종류의 하이브리드 공장/싱글 톤에서 일련의 컨텍스트를 추적하면 멀리 떨어져 있습니다. 생성자가 컨텍스트를 취하거나 비 공급되는 경우 자체를 사용하면 멀리 떨어져 있습니다.

그런 다음 이것을 큰 선에서 사용하지만 한 곳에서 모두 사용합니다.

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

이것은 복잡해 보일 수 있지만 많은 비동기 마법을 숨기고 특정 경우 버튼 핸들러에서 바로 호출 할 수 있습니다. 3 계층 시스템이 아니라 큰 시간 절약 장치입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top