Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按唯一标识符选择后使用dapper更新多个记录_C#_Dapper - Fatal编程技术网

C# 按唯一标识符选择后使用dapper更新多个记录

C# 按唯一标识符选择后使用dapper更新多个记录,c#,dapper,C#,Dapper,我有从数据库加载的记录数,我想在返回它们之前更新集合的耦合值。唯一的主要要求是我不希望多个命令逐个更新每个记录 请注意,我的ID是GUID(唯一标识符) 到目前为止,我的代码是 public IEnumerable<Person> GetUnprocessedPeople(int batchSize) { List<Queue_ImportQueue> list; using (IDbConnection db = OpenedCo

我有从数据库加载的记录数,我想在返回它们之前更新集合的耦合值。唯一的主要要求是我不希望多个命令逐个更新每个记录

请注意,我的ID是GUID(唯一标识符)

到目前为止,我的代码是

public IEnumerable<Person> GetUnprocessedPeople(int batchSize)
    {
        List<Queue_ImportQueue> list;
        using (IDbConnection db = OpenedConnection)
        {
            string peopleList = $"SELECT TOP({batchSize}) * FROM [dbo].[Person]";

            list = db.Query<Person>(peopleList).ToList();
            using (IDbTransaction transactionScope = db.BeginTransaction(IsolationLevel.Serializable))
            {
                string updateQuery = $"UPDATE [dbo].[Person] SET Created = GETDATE() WHERE Id ='@ids'";

                try
                {
                    db.Execute(updateQuery, new { Id = list.Select(x => x.Id) }, transactionScope);
                    transactionScope.Commit();
                }
                catch (Exception ex)
                {
                    transactionScope.Rollback();
                    throw;
                }
            }
        }
        return list;
    }
public IEnumerable GetUnprocessedPeople(int-batchSize)
{
名单;
使用(IDbConnection db=OpenedConnection)
{
string peopleList=$“从[dbo].[Person]中选择TOP({batchSize})*”;
list=db.Query(peopleList.ToList();
使用(IDbTransaction transactionScope=db.BeginTransaction(IsolationLevel.Serializable))
{
字符串updateQuery=$“UPDATE[dbo].[Person]SET Created=GETDATE(),其中Id='@ids';
尝试
{
Execute(updateQuery,new{Id=list.Select(x=>x.Id)},transactionScope);
transactionScope.Commit();
}
捕获(例外情况除外)
{
transactionScope.Rollback();
投掷;
}
}
}
退货清单;
}

好的,解决方案非常简单。 不需要特殊铸造。 只要确保你所有的论点都是正确的。 因此,为我修复查询的摘录:

            string updateQuery = $"UPDATE [dbo].[Person] SET Created = GETDATE() WHERE Id ='@Ids'";

           ...

            db.Execute(updateQuery, new { Ids = list.Select(x => x.Id) }, transactionScope);

我们如何使用多个条件更新多列,如果列表中有一个列表od数据和多个参数,例如,如下所示,如果列表中有一个数据列表和多个参数,例如$“update[dbo].[Person],我们如何使用多个条件更新多列SET Created=@date,IsActive=@IsActive'',其中Id='@Ids'和PersonId='@PersonId'。。。。正如我所说,我有一个包含8到10行的数据列表,需要从该列表中获取参数进行更新。我们如何update@KalpeshKoli这取决于您是否具有相同的Id或多个Id。上面的查询将针对给定的每个id执行。在您的情况下,必须为每一行创建一个参数列表。检查教程()列表将最适合您所描述的内容。大量参数(ID)将引发异常