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)
그래서 둘을 결합해야합니다.
나는 내가 얻은 대답이 노력이나 성과면에서 '가치가 없다'는 라인을 따라있을 것이라고 생각하지만 어쨌든 나는 전문가에게 물어볼 것이라고 생각했다. 당신이 코드를 사용할 수 있습니다
홀수 (당신은 코드 번호 라인을 감소). (m => m.AnotherField! = null)은 작동하지만 .Where (술어)는 그렇지 않습니다.) - 구문이 표시됩니다 ... 'Where'에 대한 정의가 없습니다. – dotnetnoob
@ user1437135 일반 술어 (T)'와 거래 사이. 함수의 정의에서 거래로 T를 바꾸면 작동 할 것입니다. –
@ user1437135 나는 답을 편집 했으므로 더 잘 작동 할 것입니다. –