문제

나는 여기서 LINQ 쿼리에 왼쪽 결합을 만들기 위해 여기서 노력하고 있지만이 아이디어를 실현하는 방법을 모른다고 말하고 싶습니다.

기본적으로 여기에 내가하고 싶은 3 가지 데이터베이스 구조가 있습니다.

<tags>
id | name

<events_tags>
tag_id | event_id

<events>
id | name | some-other-fields

따라서 각 이벤트마다 태그와 일대일 관계가 있으므로 이벤트는 하나 이상의 태그를 가질 수 있습니다.

태그를 기반으로 이벤트를 검색하는 방법을 알고 싶거나 이벤트 ID를 기준으로 관련 태그를 알고있는 방법을 알고 싶습니다.

도움이 되었습니까?

해결책

태그로 이벤트를 검색하려면 다음과 같은 것을 쓸 수 있다고 생각합니다.

var tagsIds = from t in DataContext.Tags
              where t.Name == "sometag"
              select t.id;

var eventsByTag = from et in DataContext.EventTags
                  where tagsIds.Contains(et.tag_id)
                  select et.Event;

이벤트 태그를 얻으려면 :

var tagsByEvent = from et in myEvent.EventTags
                  select et.Tag;

후자를 위해 편의상 이벤트 속성에 넣을 수 있습니다.

public List<Tag> Tags
{
   get
   {
      List<Tag> tags = (from et in this.EventTags
                        select et.Tag).ToList();
      return tags;
   }
}

그리고 필요한 곳에 myevent.tags를 참조하십시오.

다른 팁

당신은 여기에 많은 사람들에게 많은 참여를 원하십니까?

http://blogs.msdn.com/mitsu/archive/2007/06/21/how-to-implement-a-many-to-many-relationship-using-linq-tql.aspx

그리고 Scott Guthrie 의이 사람은 기본 사항을 파악하는 데 유용합니다.

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

도움이되기를 바랍니다

지정된 태그 이름의 이벤트 이름을 찾으려면 다음을 수행 할 수 있습니다.

Console.WriteLine("\nEvents tagged as .NET:\n");

(from evtTag in ctx.EventsTags
 join tag in ctx.Tags on evtTag.TagID equals tag.ID
 where tag.Name == ".NET"
 join evt in ctx.Events on evtTag.EventID equals evt.ID
 select evt)
 .ToList()
 .ForEach(evt => Console.WriteLine(evt.Name));

마찬가지로 이와 같은 특정 이벤트 이름이있는 태그를 검색 할 수 있습니다.

Console.WriteLine("\nTags for TechEd:\n");

(from evtTag in ctx.EventsTags
 join evt in ctx.Events on evtTag.EventID equals evt.ID
 where evt.Name == "TechEd"
 join tag in ctx.Tags on evtTag.TagID equals tag.ID
 select tag)
 .ToList()
 .ForEach(tag => Console.WriteLine(tag.Name));

조인 테이블로 시작하여 알려진 값으로 테이블에서 결합 및 필터링 한 다음 검색 된 값과 함께 테이블에 결합하는 방법에 주목하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top