2010-06-28 21 views
-1

我如何使用insert into myTABLE (. . . .. .) select * from(.......)。我尝试写一些linq查询,但我不能。请看linq查询。我怎样才能插入更多的数据插入与更多的选择语句linqToSQL查询?

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 
         } 
        } 
       } 
+0

如果你已经在T-SQL中有这个,那么你为什么要将它改为Linq-to-SQL? L2S非常适合处理单个记录及其关系,或者一小排行。当处理复杂的SQL时,它并不是真正的冠军 - 这就是为什么我们有SQL。使用正确的工具进行工作 - 在T-SQL中保留这个工具,并使用标准的ADO.NET从应用中调用它。 – 2010-06-28 11:02:30

回答

1

的真相是,L2S是不是真的对那种操作的优化。您可以创建一个存储过程来执行它(可以将它添加到您的L2S数据环境中执行),也可以将其写入为直接数据库命令。

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

相关问题