2 Stimmen

3 Kriterien mit oder verbinden

Ist es möglich, 3 ICriteria mit der OR-Anweisung und nicht mit AND zu verknüpfen?

ICriteria criteriaCity = NHibernateSession.CreateCriteria(typeof(Advertisements))
            .CreateCriteria(AdvertisementsProperties.City.ToString(), "city").
            Add(Restrictions.Or(
                    Restrictions.Like("city." + CitiesProperties.Name.ToString(), text, MatchMode.Anywhere),
                    Restrictions.Like("city." + CitiesProperties.SlovenianName.ToString(), text, MatchMode.Anywhere)));

        ICriteria criteriaArea = NHibernateSession.CreateCriteria(typeof(Advertisements))
            .CreateCriteria(AdvertisementsProperties.Area.ToString(), "area").
            Add(Restrictions.Or(
                    Restrictions.Like("area." + AreasProperties.Name.ToString(), text, MatchMode.Anywhere),
                    Restrictions.Like("area." + AreasProperties.SlovenianName.ToString(), text, MatchMode.Anywhere)));

        ICriteria criteriaCountry = NHibernateSession.CreateCriteria(typeof(Advertisements))
            .CreateCriteria(AdvertisementsProperties.Country.ToString(), "country").
                Add(Restrictions.Or(
                        Restrictions.Like("country." + CountriesProperties.Name.ToString(), text, MatchMode.Anywhere),
                        Restrictions.Like("country." + CountriesProperties.SlovenianName.ToString(), text, MatchMode.Anywhere)));

Mit freundlichen Grüßen


Wenn ich das so versuche:

var criteria= NHibernateSession.CreateCriteria<Advertisements>();
criteria.CreateCriteria(AdvertisementsProperties.City.ToString(), "City");
criteria.CreateCriteria(AdvertisementsProperties.Area.ToString(), "Area");
criteria.CreateCriteria(AdvertisementsProperties.Country.ToString(), "Country");

        var dis = Restrictions.Disjunction();
        dis.Add(Restrictions.Like("City.Name", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("City.SlovenianName", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("Area.Name", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("Area.SlovenianName", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("Country.Name", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("Country.SlovenianName", text, MatchMode.Anywhere));
        criteria.Add(dis);

Ich bekomme nie ein Ergebnis. Ich benutze nur

var criteria= NHibernateSession.CreateCriteria(); criteria.CreateCriteria(AdvertisementsProperties.City.ToString(), "Stadt"); criteria.CreateCriteria(AnzeigenEigenschaften.Land.ToString(), "Land");

    var dis = Restrictions.Disjunction();
    dis.Add(Restrictions.Like("City.Name", text, MatchMode.Anywhere));
    dis.Add(Restrictions.Like("City.SlovenianName", text, MatchMode.Anywhere));
    dis.Add(Restrictions.Like("Country.Name", text, MatchMode.Anywhere));
    dis.Add(Restrictions.Like("Country.SlovenianName", text, MatchMode.Anywhere));
    criteria.Add(dis);

funktioniert dann. Aber die Anzahl der Zeilen ist dann anders

var criteria= NHibernateSession.CreateCriteria<Advertisements>();
    criteria.CreateCriteria(AdvertisementsProperties.Country.ToString(), "Country");

            var dis = Restrictions.Disjunction();
            dis.Add(Restrictions.Like("Country.Name", text, MatchMode.Anywhere));
            dis.Add(Restrictions.Like("Country.SlovenianName", text, MatchMode.Anywhere));
            criteria.Add(dis);

Haben Sie eine Ahnung, warum? Ich verstehe nicht...

Mit freundlichen Grüßen

1voto

Jamie Ide Punkte 46985

Verwenden Sie eine Disjunction-Einschränkung für mehrere OR-Einschränkungen; umgekehrt verwenden Sie Junction für mehrere ANDs. Ich bin mir nicht sicher, wofür die xProperties-Klassen gedacht sind, aber damit sollten Sie anfangen können:

var criteria = session.CreateCriteria<Advertisements>();
var dis = Restrictions.Disjunction();
dis.Add(Restrictions.Like("City.Name", text, MatchMode.Anywhere);
dis.Add(Restrictions.Like("City.SlovenianName", text, MatchMode.Anywhere);
dis.Add(Restrictions.Like("Area.Name", text, MatchMode.Anywhere);
dis.Add(Restrictions.Like("Area.SlovenianName", text, MatchMode.Anywhere);
dis.Add(Restrictions.Like("Country.Name", text, MatchMode.Anywhere);
dis.Add(Restrictions.Like("Country.SlovenianName", text, MatchMode.Anywhere);
criteria.Add(dis);
return criteria.List<Advertisements>();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X