如何在linq中将记录从一个表移动到另一个表

时间:2010-08-21 01:21:05

标签: c# sql linq service

我在SQL数据库中有一个ProductLevel表。它包含商店的产品。我希望在用户早上登录到手持设备时将这些记录复制到ProductLevelDaily表中。

当他们扫描物品时,bool从false变为true,因此在任何时候他们都可以看到剩下要扫描/检查的物品。

在移动设备上,我将siteID和日期传递给服务器:

int userID = int.Parse(oWebRequest.requestData[5]); and a few other things

IEnumerable<dProductLevelDaily> plditems 
         = DSOLDAL.CheckProductDailyLevelbySiteCount(siteID, currentDate);

检查此商店是否已将任何记录移入此表。这个表第一次应为空或在此日期不包含此商店的记录。

if (plditems.Count() == 0) // is 0
{
    IEnumerable<dProductLevel> ppitems = DSOLDAL.GetProductsbySite(siteID);

    // this gets the products for this store 
    if (ppitems.Count() > 0)
    {
        dProduct pi = new dProduct();

        foreach (dProductLevel pl in ppitems)
        {
            // get the product
            pi = DSOLDAL.getProductByID(pl.productID, companyID);

            dProductLevelDaily pld = new dProductLevelDaily();

            pld.guid = Guid.NewGuid();
            pld.siteID = siteID;
            pld.statusID = 1;
            pld.companyID = companyID;
            pld.counted = false;
            pld.createDate = DateTime.Now;
            pld.createUser = userID;
            pld.productID = pl.productID;
            pld.name = "1000"; //  pi.name;
            pld.description = "desc"; // pi.description;

            DSOLDAL.insertProductLevelDailyBySite(pld);
        }
    }
}

在PDA上,weberequest响应返回NULL

我看不出问题是什么,为什么它不起作用。

插入内容为DSOLDAL:

public static void insertProductLevelDailyBySite(dProductLevelDaily pld)
{
    dSOLDataContext dc = new dSOLDataContext();

    try
    {
        dc.dProductLevelDailies.InsertOnSubmit(pld);
        // dProductLevelDailies.Attach(pld, true);
        dc.SubmitChanges();
    }
    catch (Exception exc)
    {
        throw new Exception(getExceptionMessage(exc.Message));
    }
    finally
    {
        dc = null;
    }
}

此代码有效,直到我将foreach循环放入insert

IEnumerable<dProductLevelDaily> plditems
           = DSOLDAL.CheckProductDailyLevelbySiteCount(siteID, s);

if (plditems.Count() == 0) // plditems.Count() < 0) 
{
    IEnumerable<dProductLevel> ppitems = DSOLDAL.GetProductsbySite(siteID);
    if (ppitems.Count() > 0)
    {

        oWebResponse.count = ppitems.Count().ToString();
        oWebResponse.status = "OK";
    }
    else
    {
        oWebResponse.count = ppitems.Count().ToString();
        oWebResponse.status = "OK";

    }
}
else
{
    oWebResponse.count = "2"; //  plditems.Count().ToString();
    oWebResponse.status = "OK";
}

1 个答案:

答案 0 :(得分:0)

这些批量操作与Linq-to-SQL的功能不太匹配。

在我看来,我会使用存储过程执行此操作,您可以将其包含在Linq-to-SQL DataContext中并从那里调用。

这也会将数据留在服务器上,只是将其从一个表复制到另一个表,而不是将所有数据下载到客户端并重新上传到服务器。

Linq-to-SQL是一个很棒的工具 - 用于操作单个对象或小集。它不太适合批量操作。

相关问题