2016-06-22 10 views
0

Ich bin wirklich mit diesem NHibernate Query :) Kopf, um einen Beitritt zu schreiben. Ich habe viele zu viele Beziehung mit Asset und Produkt. Nachfolgend finden Sie die Tabelle ModellNHibernate QueryOver Join viele zu viele

public class Asset 
{ 
    string Id { get; set; } 
    List<Product> Products { get; set; } 
} 

public class Product 
{ 
    string Id { get; set; } 
    List<Asset> Assets { get; set; } 
} 

Hier ist der Code, den ich mit QueryOver versuche

Product productAlias = null; 
Asset assetAlias = null; 
var query = Session.QueryOver<Asset>(()=>assetAlias); 

if (!string.IsNullOrEmpty(title)) 
    query.WhereRestrictionOn(x => x.Title).IsLike(title, MatchMode.Anywhere); 

if (!string.IsNullOrEmpty(productNumber)) 
{ 
    query.WhereRestrictionOn(asset => asset.Products.First().Id).Equals(productNumber); 
} 

    var result = query.List<Asset>(); 

Kann mir jemand helfen, wie die Join queryover zu schreiben, so dass ich alle Asset-Titel, dessen finden wollen ist wie titel und die produktnummer entspricht der produktnummer?

Ich bekomme nicht das Ergebnis mit dem obigen Code.

The sql query i am trying to achieve is : 

select a.* from Asset a , 
ManyToManyTable b on a.mat_id=b.mat_id 
where a.title like '%test%' and b.prod_no='212300733' 

Dank

+0

Ich nehme an, Sie versuchen tatsächlich für 'wählen Sie ein. * Von Assest eine * innere Verbindung * ManyToManyTable b auf ...'. –

+0

Nein, ich versuche links beizutreten. Ein Asset kann null oder viele Produkte haben. –

+0

Wenn es null Produkte hat, wird es nie irgendwelche haben, die der Produktnummer entsprechen. –

Antwort

0

Sie müssen .JoinQueryOver() verwenden, um den Kontext zu ändern, was Sie auf die WHERE Einschränkungen sind platzieren. Erfahren Sie mehr unter http://blog.andrewawhitaker.com/blog/2014/03/16/queryover-series-part-2-basics/. Dies sollte nahe sein, was Sie suchen. Sie geben an, dass Sie nach einem linken Join suchen, aber da der Join hier nur angewendet wird, wenn eine Produktnummer angegeben ist, sollte es keine Probleme geben. Es ist möglich, .Left.JoinQueryOver() zu verwenden, wenn Sie es jedoch benötigen.

+0

Das ist brilliant. Danke vielmals! –

Verwandte Themen