zoukankan      html  css  js  c++  java
  • Linq To SQL Update Delete

      public static class StaticClass
    {
    ///<summary>
    /// 批量删除
    ///</summary>
    ///<typeparam name="T"></typeparam>
    ///<param name="table"></param>
    ///<param name="predicate"></param>
    ///<returns></returns>
    public static int Delete<T>(this Table<T> table, Expression<Func<T, bool>> predicate) where T : class
    {
    string tableName = table.Context.Mapping.GetTable(typeof(T)).TableName;
    DbCommand command=table.Context.GetCommand(table.Where(predicate));
    string sqlCondition = command.CommandText;
    sqlCondition = sqlCondition.Substring(sqlCondition.LastIndexOf("WHERE ", StringComparison.InvariantCultureIgnoreCase) + 6);
    // 去掉表中出现的 t0
    sqlCondition = sqlCondition.Replace("[t0].", "");
    string commandText = string.Format("Delete FROM {0} WHERE {1}", tableName , sqlCondition);
    command.CommandText = commandText;


    //执行
    try
    {
    if (command.Connection.State != ConnectionState.Open)
    {
    command.Connection.Open();
    }
    return command.ExecuteNonQuery();
    }
    finally
    {
    command.Connection.Close();
    command.Dispose();
    }

    }

    ///<summary>
    /// 批量更新
    ///</summary>
    ///<typeparam name="T"></typeparam>
    ///<param name="table"></param>
    ///<param name="predicate">查询条件表达式</param>
    ///<param name="updater">更新表达式</param>
    ///<returns>影响的行数</returns>
    public static int Update<T>(this Table<T> table, Expression<Func<T, bool>> predicate, Expression<Func<T, T>> updateExp) where T : class
    {
    string tableName = table.Context.Mapping.GetTable(typeof(T)).TableName;
    DbCommand command = table.Context.GetCommand(table.Where(predicate));
    string sqlCondition = command.CommandText;
    sqlCondition = sqlCondition.Substring(sqlCondition.LastIndexOf("WHERE ", StringComparison.InvariantCultureIgnoreCase) + 6);

    //获取Update的赋值语句
    var updateMemberExp = (MemberInitExpression)updateExp.Body;
    var updateMemberCollection = updateMemberExp.Bindings.Cast<MemberAssignment>().Select(c =>
    {
    var p = command.CreateParameter();
    p.ParameterName = c.Member.Name;
    p.Value = ((ConstantExpression)c.Expression).Value;
    return p;
    }).ToArray();

    string sqlUpdateBlock = string.Join(", ", updateMemberCollection.Select(c => string.Format("[{0}]=@{0}", c.ParameterName)).ToArray());

    //组合SQL 语句
    string commandText = string.Format("UPDATE {0} SET {1} FROM {0} AS t0 WHERE {2}", tableName, sqlUpdateBlock, sqlCondition);

    //获取参数数组
    command.Parameters.AddRange(updateMemberCollection);
    command.CommandText = commandText;
    //执行
    try
    {
    if (command.Connection.State != ConnectionState.Open)
    {
    command.Connection.Open();
    }
    return command.ExecuteNonQuery();
    }
    finally
    {
    command.Connection.Close();
    command.Dispose();
    }
    }
    }

    // 查询
              DataClasses1DataContext dbo = new DataClasses1DataContext();
                Table<K_Menu> tb = dbo.GetTable<K_Menu>();
                List<K_MenuCopy> list;//= new List<K_Menu>();
                using (DbConnection dbCon = tb.Context.Connection)
                {
                    var query1 = tb.Select(a => new { a.BigImage, a.Image, a.MenuID });
                    DbCommand dbCommand = tb.Context.GetCommand(query1);
                    dbCon.Open();
                    using (DbDataReader dr = dbCommand.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        list = dbo.Translate<K_MenuCopy>(dr).ToList();
                    }

                }
  • 相关阅读:
    java selenium (十) 操作浏览器
    java selenium (九) 常见web UI 元素操作 及API使用
    java selenium (六) XPath 定位
    正则表达式
    日志模板
    软件开发规范
    TCP协议的粘包现象和解决方法
    验证用户的合法性
    PythonDay16
    PythonDay15
  • 原文地址:https://www.cnblogs.com/rhythmK/p/2229572.html
Copyright © 2011-2022 走看看