我正在尝试将SQL存储过程转换为LINQ以进行一些性能测试(试图弄清楚在我们的某些方法中使用LINQ是否会加快速度)
我在LINQ做任何事情都是新手,所以我只是修改书籍/网上的例子以满足我的需要而且我坚持不懈。
到目前为止我有这个代码:
DIM TicketID as INTEGER = 1
DIM s =
FROM User in PersonnelTbl
WHERE !(from t in tblSupportTicketNotifications where t.TicketID = TicketID select t.EmployeeID).Contains(User.EmployeeID)
Select user
我不知道为什么但是我在Where子句行上得到了一个Identifier期望的错误消息。谁能指出我正确的方向?干杯
到目前为止,我的代码基于此示例:
var query =
from c in dc.Customers
where !(from o in dc.Orders
select o.CustomerID)
.Contains(c.CustomerID)
select c;
这就是我想要转换的内容
CREATE PROCEDURE spGetEmployeesToBeNotified
(
@TicketID INT
)
AS
BEGIN
SELECT
ID,
FirstName,
Surname,
FirstName+' '+Surname As FullName,
WorkEmail,
0 AS Checked
FROM
PersonnelTbl
WHERE
ID NOT IN(SELECT EmployeeID FROM tblSupportTicketNotifications WHERE TicketID = @TicketID)
AND
(FirstName IS NOT NULL
AND
FirstName <> ''
AND
Surname IS NOT NULL
AND
Surname <> '')
UNION
SELECT
person.ID,
person.FirstName,
person.Surname,
person.FirstName +' '+person.Surname As FullName,
person.WorkEmail,
1 AS Checked
FROM
PersonnelTbl person
JOIN
tblSupportTicketNotifications notify
ON
person.ID = notify.EmployeeID
WHERE
TicketID = @TicketID
ORDER BY
FirstName ASC,
Surname ASC
END
答案 0 :(得分:1)
Linq-2-sql绝不会超过存储过程。
最后,Linq-2-sql所做的就是为您提供一种更面向对象的方法,但最终它将被发送到数据库。因此,如果您将相同的SQL放在存储过程中,那么根据定义它至少同样快。
答案 1 :(得分:1)
假设您在User和SupportTicketNotifications之间存在关联,您可以尝试使用Exists子句而不是In的以下内容。然后,您可以分析SQL中的差异,以查看哪一个实际上更快(或者如果SQL引擎将它们优化为相同的东西。)
DIM TicketID as INTEGER = 1
DIM s =
FROM User in PersonnelTbl
WHERE Not User.SupportTicketNotifications.Any(Function(t) t.TicketID = TicketID)
' The Select is optional in VB if you are just returning the item you are selecting.
关于使用LINQ to SQL与原始ADO相比的性能,您可能需要查看http://blogs.msdn.com/ricom/archive/2007/06/22/dlinq-linq-to-sql-performance-part-1.aspx。在学习LINQ时,您应该努力分析您在做什么,以帮助您了解正在发生的事情以及您需要在哪些方面进行性能改进(包括在必要时使用存储过程/自定义ADO)。
答案 2 :(得分:0)
!是一个C#运算符。你想要“不”代替VB.Net。