2012-09-07 7 views
0

작업 단위 + 저장소 패턴으로 EF4.3을 사용하고 있습니다.여기서 linq 술어를 결합 할 수 있습니까?

나는 다른 방법의 기본으로 작용하는 방법을 가지고 있습니다. 코드는 다음과 같습니다.

이 내 '기본'방법 : 여기

public static IQueryable<Deal> FindActive() 
    { 
     var r = new ReadRepo<Deal>(Local.Items.Uow.Context); 

     return r.Find(d => 
      d.ActiveFrom <= DateTime.Now && 
      (d.ActiveUntilComputed == null || d.ActiveUntilComputed > DateTime.Now) && 
      d.Published); 
    } 

은 기본 메소드를 호출 방법 중 하나입니다 : 내가 먼저 FindActive 전화,

public static IQueryable<Deal> FindActiveByStore(int storeId) 
    { 
     Guard.Default(storeId, "storeId"); 
     return FindActive().Where(d => d.StoreId == storeId); 
    } 

당신이 FindActiveByStore에서 볼 수 있듯이을, 그러면 체인이 Find()입니다. FindActive 다음에는 Where()이 붙어 보조 술어를 추가합니다 (용어를 사용하십시오).

Where()을 사용하는 대신 술어를 FindActive으로 전달할 수 있는지, 그리고 실제로 성능면에서 차이가 있는지 궁금합니다. 이처럼

:

는 FindActive 이미 Find()에 술어를 통과
FindActive(d => d.StoreId == storeId) 

그래서 둘을 결합해야합니다.

나는 내가 얻은 대답이 노력이나 성과면에서 '가치가 없다'는 라인을 따라있을 것이라고 생각하지만 어쨌든 나는 전문가에게 물어볼 것이라고 생각했다. 당신이 코드를 사용할 수 있습니다

답변

0

public IQueryable<Deal> FindActiveByStore(Expression<Func<Deal,bool>> predicate) 
{ 
    var r = new ReadRepo<Deal>(Local.Items.Uow.Context); 

    return r.Find(d => d.ActiveFrom <= DateTime.Now 
      && (d.ActiveUntilComputed == null || d.ActiveUntilComputed > DateTime.Now) 
      && d.Published) 

      .Where(predicate); 
} 
+0

홀수 (당신은 코드 번호 라인을 감소). (m => m.AnotherField! = null)은 작동하지만 .Where (술어)는 그렇지 않습니다.) - 구문이 표시됩니다 ... 'Where'에 대한 정의가 없습니다. – dotnetnoob

+0

@ user1437135 일반 술어 (T)'와 거래 사이. 함수의 정의에서 거래로 T를 바꾸면 작동 할 것입니다. –

+0

@ user1437135 나는 답을 편집 했으므로 더 잘 작동 할 것입니다. –

관련 문제