Pregunta

Estoy tratando de escribir una consulta simple que requiere un alias como Muchos-A-Muchos asociación sin embargo no puedo llegar a trabajar con NH Lambda Extensiones.Siempre me da un error de compilación a pesar de que hasta puedo decir que es exactamente el mismo que el de la documentación y todos los ejemplos que he visto en línea.

Obras

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

No funciona

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

Resultados en una generación Error 22 The name 'zipAlias' does not exist in the current context

Intellisense también destaca la CreateCriteria**<County>** diciendo que no entiende el método sin embargo lo hace correctamente me muestre los nombres de los parámetros cuando estoy dentro de los paréntesis.

¿Fue útil?

Solución

El documentación está lleno de ejemplos prácticos.

Su zipAlias debe ser una variable en el ámbito local.

Zip zipAlias = null;
string zipCode = "";

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

Como la documentación enlace de descarga en lugar de la representación, he copiado algunas secciones.

Crear Criterios De Asociación Con Alias
El uso original ICriteria API:

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

Usando NHibernate Lambda Extensiones:

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

Crear Criterios De Alias Asociación Con Alias Y Tipo De Combinación
El uso original ICriteria API:

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

Usando NHibernate Lambda Extensiones:

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");

Crear Criterios De Asociación Con Alias Y Tipo De Combinación
El uso original ICriteria API:

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

Usando NHibernate Lambda Extensiones:

Child childAlias = null;
DetachedCriteria after =
    DetachedCriteria.For<Person>()
        .CreateCriteria((Person p) => p.Children, () => childAlias, JoinType.LeftOuterJoin)
            .Add<Child>(c => c.Nickname == "test");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top