Vb.net Linq 2 SQL对表的多个联接

Vb.net Linq 2 SQL对表的多个联接,vb.net,linq-to-sql,Vb.net,Linq To Sql,我继承了一个web应用程序,正在更新中。我的部分更新涉及更改Linq语句中的SQL脚本。大多数都很简单,但我已经用一个特定的脚本结束了 SELECT ID, DateRecd, b.FullName As RecdBy, OrderID, c.ProductType, a.ProductRef, c.ProdName, c.ProdCat, Qty FROM tblOrderData As a JOIN tblUsers As n ON a.RecdBy = n.UserNo JO

我继承了一个web应用程序,正在更新中。我的部分更新涉及更改Linq语句中的SQL脚本。大多数都很简单,但我已经用一个特定的脚本结束了

    SELECT ID, DateRecd, b.FullName As RecdBy, OrderID, c.ProductType, a.ProductRef, 
c.ProdName, c.ProdCat, Qty FROM tblOrderData As a 
JOIN tblUsers As n ON a.RecdBy = n.UserNo 
JOIN tblProducts As c ON a.ProductRef = c.ProductRef 
WHERE a.ProductRef LIKE '" & tb_ProdRefFind.Text.Trim() & "%' AND DateProcessed Is Null

Dim Orders2Process = (From od In dc.tblOrderDatas
                                    Join u In dc.tblUsers On u.UserNo Equals od.RecdBy
                                    Join pr In dc.tblProductss On pr.ProductRef Equals od.ProductRef
                                    Where od.ProductRef.StartsWith(tb_FIRefFind.Text.Trim()) And od.DateProcessed.HasValue = False
                                    Select New With {.ID = od.ID,
                                                     .DateReceived = od.DateRecd,
                                                     .ReceivedBy = u.FullName,
                                                     .OrderID = od.OrderID,
                                                     .ProductType = pr.ProductType,
                                                     .ProductRef = od.ProductRef,
                                                     .ProductName = pr.ProductName,
                                                     .ProductCat = pr.ProductCat,
                                                     .Qty = od.Qty})



;WITH tblUsers(UserNo, FullName) AS (SELECT UserNo, FullName FROM tblUsers) 
SELECT ID, DateRecd, N1.FullName As RecdBy, OrderID, c.ProductType a.ProductRef, 
c.ProdName, c.ProdCat, Qty, DateProcessed, N2.Fullname As ProcessedBy 
FROM tblOrderData As a JOIN tblUsers N1 ON a.RecdBy = N1.UserNo 
JOIN tblUsers N2 ON a.ProcessedBy = N2.UserNo 
JOIN tblProducts As c ON a.ProductRef = c.ProductRef 
WHERE a.ProductRef LIKE '" & tb_ProdRefFind.Text.Trim() & "%' 
AND DateProcessed Is Not Null

这是我第一次皈依,很好。。。第二种方法是,为接受订单的人和处理订单的人提取两次用户的全名。感谢您的帮助。

不要。LINQ并不是SQL的替代品,您刚刚发现使用SQL比使用LINQ要好得多。ORM通常用于将实体映射到表/视图/语句。当你必须加入多个实体才能得到一个实体来响应时,这是一种非常强烈的气味更多的问题:应用函数是危险的。如果Linq2SQL无法将语句转换为SQL,它将尽可能多地提取数据,然后继续在内存中处理查询的其余部分。@PanagiotisKanavos谢谢。。。我想我知道你的意思。。。我花了一段时间尝试。。。当我查看该项目时,我发现我至少需要将SQL更改为参数化值,并认为我将使用Linq,因为我正在引入Order类等。还有两个问题:1)您应该添加用户、产品之间的正确关系,而不是连接,订单数据等。这将允许您为特定用户使用例如
User.Orders
。2) 您的查询根本不返回实体,它是一个报告查询。最好在数据库中创建适当的视图,然后映射到itso脚本,这意味着字符串连接?哎哟当您使用实体时,L2或EF不是错误的选择。报告查询虽然不是实体,但它们只是成形的数据。在隐藏在视图后面的SQL语句中执行这些操作更容易