Linq加入问题

时间:2009-07-17 18:35:37

标签: linq join

我试图用linq连接做一些事情我有一个问题...目前我有一个 linq中的group,它提供两列,基本上是按位置计算的票数。那么现在我正在尝试添加一个连接,它将加入两个不同表Tickets和Comments的ticketID列。

我有一段时间试图将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 个答案:

答案 0 :(得分:1)

如果在Linq中将关系添加到NewT​​ickets和NewComments之间的sql设计器中,将在这些类上创建属性以进行导航。

使用这些属性的查询将自动转换为连接。例如:

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标准删除。内部联接会很好。

答案 1 :(得分:1)

像这样的东西

var movies = NewTickets.Join(NewComments, x => x.TicketID, y => y.TicketID, (x, y) => x).ToList();

答案 2 :(得分:0)

就是这样......在大多数情况下......我将不得不以不同的方式对此进行攻击,因为现在我得到了一个显然来自评论的计数,因为我的总数从200以下膨胀到差不多1300 ...每张票平均约有5张左右的评论,这就是为什么我假设这只是从臀部拍摄......

谢谢David,对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