Linq nach NHibernate vs. ICriteria

Ich benutze LINQ im Allgemeinen sehr oft, insbesondere LINQ-to-Objects, daher beherrsche ich LINQ ziemlich fließend.

Ich habe überlegt, LINQ-to-NHibernate als Abfragesprache für mein NHibernate-Projekt zu verwenden. Als ich einige Tests schrieb, bemerkte ich, dass LINQ-to-NHibernate nicht dieselbe Abfrage wie ICriteria durchführt. Da ich lieber LINQ verwenden würde, würde ich gerne fragen, ob jemand ähnliche Unterschiede kennt oder ob ich mich nur nicht um die Leistung im Allgemeinen kümmern sollte es). Siehe folgendes Beispiel:

var query = (from inputItem in session.Linq<InputItem>()
             where inputItem.Project == project select inputItem).First();

gibt mir folgende SQL:

SELECT this_.ID as ID0_1_, this_.Name as Name0_1_, this_.Project_id as Project3_0_1_, project1_.ID as ID1_0_, project1_.Name as Name1_0_
    FROM "InputItem" this_ left outer join "Project" project1_ on this_.Project_id=project1_.ID
    WHERE this_.Project_id = @p0 limit 1;@p0 = 1, @p1 = 1

wohingegen

var criteria = session.CreateCriteria<InputItem>();
criteria.Add(Expression.Eq("Project", project));
criteria.SetMaxResults(1);
criteria.List();

gibt

SELECT this_.ID as ID0_0_, this_.Name as Name0_0_, this_.Project_id as Project3_0_0_
    FROM "InputItem" this_
    WHERE this_.Project_id = @p0 limit 1;@p0 = 1, @p1 = 1

Der LEFT JOIN wäre natürlich nicht notwendig.

Stimmt etwas mit meiner LINQ-Abfrage nicht oder handelt es sich nur um eine Einschränkung? Und sollte ich mich überhaupt darum kümmern?

Eisig

BEARBEITEN: Ich habe versucht, die LINQ-Anweisung folgendermaßen zu ändern:

var query = (from inputItem in session.Linq<InputItem>()
             where inputItem.Project.ID == project.ID
             select inputItem).First();

Die generierte SQL ist jedoch dieselbe.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage