انضمام الاستعلام مع LINQ
سؤال
وأحاول هنا لجعل عدد قليل من اليسار ينضم إلى استعلام 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));
لاحظ كيف بدأت مع الجدول الانضمام، انضم وتصفيتها على طاولة المفاوضات مع قيمة معروفة، ثم انضم الى طاولة المفاوضات مع القيم فتشت عنه.
وجو