문제

나는 다수의 협회이기 때문에 별칭이 필요한 간단한 쿼리를 작성하려고하지만 NH Lambda 확장자와 함께 작동하지는 않습니다. 문서와 온라인에서 본 모든 예제와 정확히 동일하다고 말할 수있는 한 항상 컴파일 오류를 제공합니다.

공장

var query = DetachedCriteria.For<County>()            
    .CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
    //.CreateCriteria<County>(x => x.Zips, 
    //                              () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

작동하지 않습니다

var query = DetachedCriteria.For<County>()            
    //.CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
    .CreateCriteria<County>(x => x.Zips, 
                                    () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

빌드를 초래합니다 Error 22 The name 'zipAlias' does not exist in the current context

Intellisense는 또한 CreateCriteria **를 강조합니다.<County>**이 방법을 이해하지 못하지만 파렌 내부에있을 때 매개 변수 이름을 올바르게 표시합니다.

도움이 되었습니까?

해결책

그만큼 선적 서류 비치 편리한 사례로 가득합니다.

당신의 zipAlias 로컬 범위의 변수 여야합니다.

Zip zipAlias = null;
string zipCode = "";

var query = DetachedCriteria.For<County>()
    .CreateCriteria<County>(x => x.Zips, () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

렌더링 대신 문서 링크가 다운로드되면 일부 섹션을 복사했습니다.

별명과의 기준 연관성을 만듭니다
원래 iCRiteria API 사용 :

ICriteria before = CreateSession()
    .CreateCriteria(typeof(Person))
        .CreateCriteria("Children", "childAlias")
            .Add(Restrictions.Eq("Nickname", "test"));

nhibernate lambda 확장 사용 :

Child childAlias = null;
ICriteria after = CreateSession()
    .CreateCriteria(typeof(Person))
        .CreateCriteria((Person p) => p.Children, () => childAlias)
            .Add<Child>(c => c.Nickname == "test");

별명과 ALIAS 및 JING 유형의 기준 별명 연관성을 만듭니다
원래 iCRiteria API 사용 :

ICriteria before = CreateSession()
    .CreateCriteria(typeof(Person), "personAlias")
        .CreateCriteria("personAlias.Children", "childAlias", JoinType.LeftOuterJoin)
            .Add(Restrictions.Eq("Nickname", "test"));

nhibernate lambda 확장 사용 :

Person personAlias = null;
Child childAlias = null;
ICriteria after = CreateSession()
    .CreateCriteria(typeof(Person), () => personAlias)
        .CreateCriteria(() => personAlias.Children, () => childAlias, JoinType.LeftOuterJoin)
            .Add<Child>(c => c.Nickname == "test");

별칭 및 조인 유형과의 기준 연관성을 만듭니다
원래 iCRiteria API 사용 :

DetachedCriteria before =
    DetachedCriteria.For<Person>()
        .CreateCriteria("Children", "childAlias", JoinType.LeftOuterJoin)
            .Add(Restrictions.Eq("Nickname", "test"));

nhibernate lambda 확장 사용 :

Child childAlias = null;
DetachedCriteria after =
    DetachedCriteria.For<Person>()
        .CreateCriteria((Person p) => p.Children, () => childAlias, JoinType.LeftOuterJoin)
            .Add<Child>(c => c.Nickname == "test");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top