如何使用带有更多select语句的插入查询插入更多数据linq To SQL?

时间:2010-06-28 10:48:57

标签: c# visual-studio visual-studio-2008 linq linq-to-sql

我如何使用insert into myTABLE (. . . .. . ) select * from(.......)。我尝试写一些linq查询,但我不能。请查看linq查询。

SQL:

INSERT INTO ActualAmountsByLocation (ItemBarcode, Location, LocationName, Amount, isCustomerItem, LastUpdate)
   SELECT * FROM 
      (SELECT DISTINCT 
           m.ItemBarcode, 
           m.ToLocationType + m.ToNo AS Location,
           l.shortdesc AS LocationName,  
           dbo.spGetActualAmountByLocation(m.ItemBarcode, m.ToLocationType + m.ToNo) AS Amount, 
           0 AS isCustomerItem,
           GETDATE() AS LastUpdate 
       FROM 
           dbo.StockMovement m, RefLocations l 
       WHERE 
           m.ToLocationType = 'L' 
           AND m.ToLocationType + m.ToNo = l.code 
           AND m.ItemBarcode = @Barcode 
           AND m.TransactionType = 1
       ) a  
  ORDER BY ItemBarcode, Location

UPDATE ActualAmountsByLocation 
SET isCustomerItem = 1 
WHERE ItemBarcode IN 
      (SELECT barcode FROM StockMaterials WHERE barcode = @Barcode AND ownership = 1)

UPDATE ActualAmountsByLocation 
SET isCustomerItem = 1
WHERE ItemBarcode IN 
      (SELECT barcode FROM StockTools WHERE barcode = @Barcode AND ownership = 1)

UPDATE ActualAmountsByLocation 
SET isCustomerItem = 1 
WHERE ItemBarcode IN 
      (SELECT barcode FROM StockComponents WHERE barcode = @Barcode AND ownership = 1)

SET @ReturnMsg = RTRIM(@ReturnMsg) + 'E25: Transaction completed successfully ' + CHAR(13) + CHAR(10)

的LINQ:

if (ToLocationType == 'L')
{
   var stokRefLocation = (from m in stockMovementCtx.StockMovements
                          from l in stockMovementCtx.RefLocations
                          where m.ToLocationType == 'L' && m.ToLocationType + m.ToNo == l.code && m.ItemBarcode == Barcode && m.TransactionType == 1
                          orderby m.ItemBarcode, l.shortdesc
                          select new
                          {
                             myItemBarcode= m.ItemBarcode,
                             myLocation = m.ToNo + m.ToNo,
                             myLocationName = l.shortdesc,
                             myAmount = stockMovementCtx.spGetActualAmountByLocation(m.ItemBarcode, m.ToLocationType + m.ToNo),
                                                  myIsCustomerItem = 0,
                                                  myLastUpdate = DateTime.Now
                                              }).Distinct();

   var stokMovement2 = new ActualAmountsByLocation()
                       { 
                           ItemBarcode = stokRefLocation. //.. how can i do that? I want to see stokRefLocation.myItemBarcode
                       }
                   }
               }

1 个答案:

答案 0 :(得分:1)

事实是,L2S并没有真正针对这种操作进行优化。您可以创建一个存储过程来执行此操作(可以将其添加到L2S datacontext中以便执行),也可以将其写为直接数据库命令。

通常在ORM中,您将更新所有记录,然后在datacontext上提交更改。如果这太慢,那么考虑通过上述方法之一进行优化。