/ / join заявка с linq - c #, linq, .net-3.5, c # -3.0, ляво присъединяване

заявка за присъединяване с linq - c #, linq, .net-3.5, c # -3.0, ляво присъединяване

Опитвам се тук, за да направя няколко леви обединения в запитването на linq, но казвам, че по-скоро нямам представа как да реализирам тази идея.

Основно тук са 3-те бази данни, които искам да играя.

<tags>
id | name

<events_tags>
tag_id | event_id

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

така че за всяко събитие има връзка един-към-много с тагове, тогава събитие може да има един или повече етикети.

Бих искал да знам как да търся събитие на базата на етикет или как мога, базиран от идентификатор на събитие, да познавам свързаните с него тагове?

Отговори:

0 за отговор № 1

За да потърсите събитие по маркер, мисля, че можете да напишете нещо като:

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, където имате нужда от тях.


1 за отговор № 2

Искате ли да направите много за много хора, които се присъединяват тук, изглежда така. Linq да sql не поддържа това ... тук е страхотна статия

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

Надявам се, че помага


0 за отговор № 3

За да намерите имената на събитията за определено име на маркер, можете да направите това:

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

Обърнете внимание на начина, по който започнах с таблицата за присъединяване, се присъединиха и филтрирахме на таблицата с известната стойност и след това се присъединих към таблицата с търсените стойности.

Джо