2009-07-17 2 views
1

У меня проблема с попыткой сделать пару вещей с LINK-соединениями ... в настоящее время у меня есть группа в linq, которая дает два столбца, в основном количество билетов по местоположению. Ну, теперь я пытаюсь добавить соединение, которое присоединится к столбцам ticketID двух разных таблиц Билеты и комментарии.Linq Присоединиться к вопросу

У меня есть чертовски время, чтобы конвертировать sql-соединение в Linq, а не в одиночку, слияние этого с моим исходным итоговым итоговым выражением linq ... кто-нибудь, пожалуйста, помогите!

Оригинальное заявление Linq:

From p In NewTickets _ 
Where p.TDate > "06/01/2009 12:00:00AM" And p.TDate < "07/01/2009 12:00:00PM" _ 
       Group p By p.LocationID _ 
       Into Count() _ 
       Select _ 
       LocationID, _ 
       NoOfTickets = Count _ 
       Order By NoOfTickets Descending 

Регистрация Мне нужно объединить в заявлении Linq:

SELECT * 
FROM NewTickets as p 
LEFT OUTER JOIN NewComments AS c ON p.TicketID = c.TicketID 
WHERE (p.TDate > '06/01/2009 12:00:00AM') And (p.TDate < '07/01/2009 12:00:00PM') 
AND c.Comment Like '%ali%' 

СПАСИБО!

ответ

1

Если вы добавляете отношения в конструкторе linq to sql между NewTickets и NewComments, свойства будут созданы для этих классов для навигации.

Запросы, которые используют эти свойства, автоматически преобразуются в соединение. Например:

from t in db.NewTickets 
where t.NewComments.Any(nc => nc.Comment.Contains("ali")) 
group t by t.LocationID into g 
select new {LocationID = g.Key, NoOfTickets = g.Count()} into x 
order x by x.NoOfTickets descending 
select x; 

Извините за примеры кода на C#.

Кроме того, я хотел бы указать, что левое соединение в вашем sql является спорным - билеты, у которых нет комментариев, будут удалены по критериям ali. Внутреннее соединение будет хорошо.

+0

Еще раз спасибо ... я «ответил» мой собственный потому что я хотел достаточно места и стиля для vb Перевести. Еще раз спасибо!!! – wali

0

Это было ... по большей части ... Мне нужно будет атаковать это по-другому, так как теперь я получаю счет, который, по-видимому, из комментариев, поскольку моя общая сумма увеличилась с 200 до 200 почти 1300 ... каждый билет будет иметь в среднем около 5 или около того комментариев, поэтому я предполагаю, что это просто стрельба из бедра ...

Спасибо Давид и не проблема с C# (столько, сколько я перевел , вы думаете, что я буду использовать его к настоящему времени).

Для тех, кто с помощью VB, который хотел бы видеть то же самое в VB, здесь вы идете:

Dim q = From e In db.NewTickets _ 
       Where e.NewComments.Any(Function(nc) nc.Comment.Contains("ali")) _ 
       Group e By e.LocationID _ 
        Into Count() _ 
        Select _ 
        LocationID, _ 
        NoOfTickets = Count _ 
        Order By NoOfTickets Descending 
1

Что-то вроде этого

var movies = NewTickets.Join(NewComments, x => x.TicketID, y => y.TicketID, (x, y) => x).ToList(); 
Смежные вопросы