Как переместить записи из одной таблицы в другую в linq - PullRequest
1 голос
/ 21 августа 2010

У меня есть таблица ProductLevel в базе данных SQL. Содержит товары для магазина. Я хочу скопировать эти записи в таблицу ProductLevelDaily во время утреннего входа пользователя в ручное устройство.

Когда они сканируют предметы, bool переходит от ложного к истинному, поэтому в любое время они могут видеть, какие предметы остаются для сканирования / проверки.

С мобильного устройства я передаю 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);
        }
    }
}

На КПК ответ 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 внутрь со вставкой

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 голосов
/ 21 августа 2010

Этот тип массовых операций не очень хорошо соответствует тому, что делает Linq-to-SQL.

По моему мнению, я бы сделал это с помощью хранимой процедуры, которую вы могли бы включить в свой Linq-to-SQL DataContext и вызывать оттуда.

Это также оставило бы данные на сервере и просто скопировало бы их из одной таблицы в другую, вместо того, чтобы загружать все данные на ваш клиент и повторно загружать их на сервер.

Linq-to-SQL - отличный инструмент для управления отдельными объектами или небольшими наборами. Он менее подходит для массовых операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...