2009-07-17 56 views
1

我有一個問題,試圖用linq連接做幾件事情......目前我在linq中有一個 組,它給出了兩列,基本上是按位置計算的票數。那麼現在我試圖添加一個連接,它將加入兩張不同表格Ticket和Comments的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%' 

THANK YOU!

回答

1

如果你在linq中添加一個關係到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 2009-07-17 20:11:44

0

這就是它......大部分......我將不得不以這樣一種不同的方式攻擊,因爲現在我得到的數據顯然來自評論,因爲我的總數從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();