2012-12-06 3 views
0

Я пытаюсь применить условия для внешнего ключа субъекта клиента, то есть Заказы, я хочу загрузить только заказы, чей IsCancelFlag является ложным (результат будет иметь тип customer customer object, и он кодирует набор объектов Order). Но при повторении через возвращаемые результаты я могу видеть все заказы под заказчиком, независимо от того, отменен он или нет. Можно ли применять условия на внешний ключ в NHibernateПрименение условий для внешнего ключа с использованием Nhibernate

 ICriteria _criteria= session.CreateCriteria<Customer>(); 
     _criteria.Add(Expression.Eq("CustomerId", 12)); 
     _criteria.CreateAlias("FKorders","FKorders"); 
     _criteria.Add(Expression.Eq("FKorders.IsCancelFlag", false)); 
     return _criteria.UniqueResult<Customer>(); 
+0

Есть ли [это] (http://stackoverflow.com/questions/2729599/nhibernate-criteria-for-selecting-a-parent-if-a-child-in-a-collection-ahs-a-spec) дать вам то, чего вы пытаетесь достичь? –

+0

Указанное выше условие применит условие к дочернему элементу и возвращает родителя. Вместо этого я хочу применить условие для детей и получить родительские, а также дети. Я вижу альтернативы с помощью Linq, но мне нужно, чтобы Nhibernate делал то же самое. – amesh

ответ

1

ваши имена собственности кажется weired, но, может быть, вы хотите

var query = 
    from c in session.Query<Customer>() 
    from o in c.Orders 
    where o.IsCanceled 
    select new { Customer = c, Order = o } 

var results = query.AsEnumerable() 
    .ToLookup(a => a.Customer, a => a.Order); 

это вернет ILookup<Customer, Orders>. NHibernate не вернет Клиента с частично инициализированными Заказом, так как это будет сломанная модель, и отслеживание изменений будет нарушено.

Смежные вопросы