C# + Castle ActiveRecord : Hasandbelongstomany 및 컬렉션
-
02-07-2019 - |
문제
게시물과 태그 사이 (ActiveRecord 속성 HasandBelongstomany를 사용하여) (무고한 것을 보호하기 위해 도메인 객체 이름이 변경됨)와 같은 방법을 원한다고 가정 해 봅시다.
FindAllPostByTags(IList<Tag> tags)매개 변수에 태그가있는 모든 게시물을 반환합니다. nhibernate 표현식 또는 HQL로 이것을 달성 할 수있는 방법은 무엇입니까? HQL 문서를 검색했으며 내 요구에 맞는 것을 찾을 수 없었습니다. 나는 단지 분명한 것을 놓치기를 바랍니다!
해결책
당신은 또한 만 사용할 수 있습니다 IN
성명
DetachedCriteria query = DetachedCriteria.For<Post>();
query.CreateCriteria("Post").Add(Expression.In("TagName", string.Join(",",tags.ToArray()) );
오류가 발생할 수 있도록 컴파일하지 않았습니다
다른 팁
나는 지금 당장 성 설치 시스템이 없으므로 이것을 테스트하거나 컴파일하지 않았지만 아래 코드는 원하는 것을 수행해야합니다.
Junction c = Expression.Conjunction();
foreach(Tag t in tags)
c = c.Add( Expression.Eq("Tag", t);
return sess.CreateCriteria(typeof(Post)).Add(c).List();
방금 같은 문제가 있었고 HQL 문서화를 읽으려고했지만 일부 기능은 nhibernate (예 : Keyword와 함께)에서 구현되지 않은 것 같습니다.
나는 이런 종류의 해결책으로 끝났다 :
select p FROM Post p JOIN p.Tags tag1 JOIN p.Tags tag2 WHERE tag1.Id = 1 tag2.Id = 2
즉, 각 태그에 대한 조인을 사용하여 HQL을 동적으로 구축 한 다음 WHERE 절에서 선택하십시오. 이것은 나를 위해 효과가있었습니다. 나는 분리 기업으로 같은 일을 시도했지만 테이블에 여러 번 합류하려고 할 때 어려움을 겪었습니다.
제휴하지 않습니다 StackOverflow