C# 从2个不同的数据库、2个不同的表进行Linq到SQL批量更新

C# 从2个不同的数据库、2个不同的表进行Linq到SQL批量更新,c#,sql,sql-server,linq-to-sql,C#,Sql,Sql Server,Linq To Sql,您好,我正在使用linq和sql创建一个windows SerService,如果表在过去5分钟内发生更改,它将更新某些行。这就是我所拥有的: using System; using System.Data.SqlClient; using System.Linq; namespace Prueba { internal static class Program { private static void Main() { int tienda = 9;

您好,我正在使用linq和sql创建一个windows SerService,如果表在过去5分钟内发生更改,它将更新某些行。这就是我所拥有的:

using System;
using System.Data.SqlClient;
using System.Linq;
namespace Prueba
 {
internal static class Program
{
    private static void Main()
    {
         int tienda = 9;

        var conex = new DataClasses1DataContext();
        try
        {
            var source =
                new SqlConnection(
                    "Server=LAPTOP-VCD9V9KH\\SQLEXPRESS;Database=backoffice;User Id=sa; Password=root;");

            var destination =
                new SqlConnection(
                    "Server=LAPTOP-VCD9V9KH\\SQLEXPRESS;Database=Corporativo_PRB;User Id=sa; Password=root;");
            source.Open();
            destination.Open();
            source.CreateCommand();
            var infoExistenciases = conex.Info_Existencias.Where(x => x.FechAct > DateTime.Now.AddMinutes(-5));

            foreach (var x in infoExistenciases)
            {

                var cmd2 = new SqlCommand(
                    "update Info_Corp_Existencias set Existencia =" + x.Existencia + " where sku ='" + x.SKU + "'" +
                    "AND Tienda =" + tienda, destination);
                cmd2.ExecuteNonQuery();
            }

            source.Close();
            destination.Close();
            Console.Beep();
        }
        catch
            (Exception e)
        {
            Console.WriteLine(e);
            Console.ReadLine();
            throw;
        }
    }
}
}

到目前为止,这段代码更新了目标服务器中的所有内容,但我无法真正确定如何将所有内容放入临时表中,以便让linq为每个参数更新它


感谢您的时间

因为它位于两个不同的表中,所以在不确切了解表设计的情况下,很难在第二个表中选择相应的行。但你可能可以这样做:

var cmd2 = new SqlCommand(
                "update Info_Corp_Existencias set Existencia = (select field FROM Info_Existencias WHERE id=@otherid where sku ='" + x.SKU + "'" +
                "AND Tienda =" + tienda, destination);
            cmd2.ExecuteNonQuery();
因此,省去foreach语句,只需向数据库启动一个update语句,该语句将使用subselect更新每一行的字段,以从该行中获取正确的值


希望这有帮助。

因此,您希望使用linq并对每一行执行update语句,而不是运行一条update语句吗?是,目前,它对每个语句都是这样做的,但我需要批量生成一些内容,以便只使用一个到数据库的连接,而不是使用foreach属性。遗憾的是,从foreach中删除语句会删除与x的关系,这就是我与表的关系。在windows服务中执行之前,我正在测试环境中执行此操作。当我的当前脚本更新时,如果表在过去5分钟内被修改,它会逐行更新。我需要它来进行批量更新。是的,我知道,这就是为什么我建议使用子查询。是否可以从子查询的第二个表中选择正确的行?