나는 LINQ를 많이 사용하는데 특히 LINQ-to-Objects를 사용하기 때문에 LINQ에 능숙하다.Linq to NHiternate 대 ICriteria
NHibernate 프로젝트의 쿼리 언어로 LINQ-NHibernate를 사용하려고 생각했습니다. 몇 가지 테스트를 작성했을 때, LINQ-to-NHibernate가 ICriteria와 동일한 쿼리를 작성하지 않는다는 것을 알았습니다. LINQ를 사용하기를 원하기 때문에 누구나 유사한 차이점을 알고 있는지 물어보고 싶습니다. 또는 일반적으로 성능에 대해 신경 쓰지 않아도됩니다. (고성능 작업에서는 NHibernate를 조정해야합니다. 그것).
var query = (from inputItem in session.Linq<InputItem>()
where inputItem.Project == project select inputItem).First();
나에게 다음과 같은 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
반면
var criteria = session.CreateCriteria<InputItem>();
criteria.Add(Expression.Eq("Project", project));
criteria.SetMaxResults(1);
criteria.List();
은 분명히
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
를 제공을, 왼쪽은되지 않을 것 가입 필요한.
내 LINQ 쿼리에 문제가 있습니까? 아니면 그냥 제한 사항입니까? 그리고 내가 처음에 그것에 대해 걱정해야합니까?
Icey
편집 : 나는 다음에 LINQ 문을 변경하려고 :
var query = (from inputItem in session.Linq<InputItem>()
where inputItem.Project.ID == project.ID
select inputItem).First();
생성 된 SQL하지만, 동일합니다.
나는 그것을 가지고, 나는 명백한 실수를하지 않았다. –