سؤال

وأحاول هنا لجعل عدد قليل من اليسار ينضم إلى استعلام LINQ ولكن أقول أنا ليس لدي أي فكرة عن كيفية تجسيد هذه الفكرة.

والأساس هنا هو هياكل قواعد البيانات 3 أريد أن ألعب معه.

<tags>
id | name

<events_tags>
tag_id | event_id

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

وهكذا لكل الأحداث هناك علاقة واحد لكثير مع به، وهو حدث يمكن بعد ذلك أن يكون علامة واحدة أو أكثر.

وأود أن أعرف كيفية البحث حدث بناء على علامة أو كيف يمكنني بناء من معرف الحدث معرفة العلامات المرتبطة بها؟

هل كانت مفيدة؟

المحلول

لبحث الحدث علامة، أعتقد أنك يمكن أن يكتب شيئا مثل:

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 حيث كنت في حاجة إليها.

نصائح أخرى

هل ترغب في القيام كثير لكثير الانضمام هنا، يبدو أن الطريق .... LINQ إلى SQL لا يعتمد هذا ... هنا هو كبيرة من المادة

<وأ href = "http://blogs.msdn.com/mitsu/archive/2007/06/21/how-to-implement-a-many-to-many-relationship-using-linq-to- sql.aspx "يختلط =" نوفولو noreferrer "> http://blogs.msdn.com/mitsu/archive/2007/06/21/how-to-implement-a-many-to-many-relationship-using-linq -to-sql.aspx

وهذا واحد من سكوت غوثري مفيد في الحصول على السيطرة على أساسيات

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