Autor Beitrag
manteltrager
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 26.07.12 17:02 
Ich habe die folgende Entität Customer, die wiederum hat eine Property Contact vom type Contact.cs, diese wiederum hat eine Liste Persons vom typ Person.cs. Diese Klasse Person.cs hat eine Property Lastname.
Ich habe nun folgendes Problem: Ich muss meine Liste Customers nach dieser Property Person.Lastname sortieren.

Mein crit ist dies:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
ICriteria crit = CustomerRepository.CreateCriteria();

crit.SetFirstResult(start);
crit.SetMaxResults(count);
 
DetachedCriteria dCrit = DetachedCriteria.For<Customer>();

dCrit.CreateCriteria("Employee")
    .CreateCriteria("User")
    .Add(Restrictions.Eq("UserName",username));
 
dCrit.CreateAlias("Contact","con");
dCrit.CreateAlias("con.Persons","per");
if(!String.IsNullOrWhiteSpace(search))
{

    dCrit.Add(Restrictions.InsensitiveLike("per.LastName","%"+search+"%"));

}
dCrit.AddOrder(Order.Asc("per.LastName"));
dCrit.SetProjection(Projections.Distinct(Projections.Property("Id")));
 
crit.Add(Subqueries.PropertyIn("Id",dCrit));
//crit.CreateCriteria("Contact").CreateCriteria("Persons").AddOrder(Order.Asc("LastName"));

Das Problem ist, wenn ich AddOrder auf dem dCrit ausführe, bekomme ich folgende Fehlermeldung aus unserem RoleRepository (was Bestandteil unseres CustomMembershipProviders ist), welches aber mit dem CustomerRepository das mein Criteria erzeugt, absolut nichts zu tun hat. Die Fehlermeldung ist:
could not execute query

Beide Repository benutzen die selbe Session.

Wenn ich das AddOrder auf dem crit laufen lasse (auskommentierte letzte Zeile), bekomme ich doppelte Datensätze, weswegen ich das AddOrder auf dem dCrit laufen lassen muss.

Vielen Dank für eure Hilfe im Voraus, Ivo