Frage

ich hier versuchen, ein paar linke Abfrage verknüpft in eine Linq zu machen, aber ich würde sagen, dass ich lieber keine Ahnung, wie diese Idee zu verwirklichen.

Im Grunde ist hier die drei Datenbankstrukturen ich mit spielen will.

<tags>
id | name

<events_tags>
tag_id | event_id

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

so für jeden Event gibt es eine Eins-zu-viele ist Beziehung mit Tags, kann ein Ereignis dann eine oder mehr Tags.

würde Ich mag wissen, wie ein Ereignis zu suchen, basierend auf einem Tag oder wie kann ich, basierend auf einem Ereignis-ID kennen die zugehörigen Tags?

War es hilfreich?

Lösung

Veranstaltung von Tag zu suchen, ich glaube, Sie so etwas wie schreiben:

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;

Um die Tags für eine Veranstaltung zu erhalten:

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

Für letztere für die Bequemlichkeit, können Sie es in einer Eigenschaft von Event setzen:

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

Und beziehen sich nur auf myEvent.Tags, wo sie gebraucht werden.

Andere Tipps

Sind Sie wollen ein viel zu tun, um viele hier kommen, sieht so aus .... LINQ to SQL unterstützt dies nicht ... hier ist ein großer Artikel

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

Und dieser von Scott Guthrie ist nützlich bei der mit den Grundlagen in den Griff bekommen

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

Hoffnung, die hilft

Um die Ereignisnamen für einen bestimmten Tag-Namen zu finden, könnten Sie dies tun:

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));

Ebenso können Sie für Tags mit einem bestimmten Ereignisnamen wie folgt suchen:

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));

Beachten Sie, wie ich mit der Join-Tabelle begonnen, verbunden und mit dem bekannten Wert auf dem Tisch gefiltert und dann an den Tisch trat mit den Werten gesucht.

Joe

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top