Linq Присоединиться Вопрос - PullRequest
1 голос
/ 17 июля 2009

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

У меня чертовски много времени пыталось преобразовать 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%'

СПАСИБО!

Ответы [ 3 ]

1 голос
/ 29 сентября 2014

как то так

var movies = NewTickets.Join(NewComments, x => x.TicketID, y => y.TicketID, (x, y) => x).ToList();
1 голос
/ 17 июля 2009

Если вы добавите связь в конструкторе 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 является спорным - заявки, у которых нет комментариев, будут удалены по всем критериям. Внутреннее соединение подойдет.

0 голосов
/ 18 июля 2009

Это было ... по большей части ... Я собираюсь атаковать это по-другому, так как теперь я получаю подсчет, который, очевидно, из комментариев, так как мой итог увеличился с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...