• LinqToDB之InsertOrUpdate方法


    InsertOrUpdate有两个重载方法

    1、 InsertOrUpdate<T>(ITable<T>, Expression<Func<T>>, Expression<Func<T, T>>)

      此方法更新现有记录,如果不存在,则插入新记录,查询条件为表的主键。

    声明:

    public static int InsertOrUpdate<T>(this ITable<T> target, Expression<Func<T>> insertSetter, Expression<Func<T, T>> onDuplicateKeyUpdateSetter)

    参数:

    类型 名称 详细信息
    ITable<T>
    target
    目标表
    System.Linq.Expressions.Expression<System.Func<T>>
    insertSetter 插入数据的构造函数,表达式仅支持初始化目标表所包含的字段。
    System.Linq.Expressions.Expression<System.Func<T, T>> onDuplicateKeyUpdateSetter 更新数据的构造函数,表达式仅支持初始化目标表所包含的字段,接受表名作为参数。

    返回值:int类型,受影响的记录条数

    类型参数:T  表在model中所对应的类型

    使用示例:

    using (var db = new DataConnection())
    {
        db.GetTable<TestTable3>()
            .InsertOrUpdate(
                () => new TestTable3
                {
                    ID   = 5,
                    Name = "Crazy Frog",
                },
                t => new TestTable3
                {
                    Name = "Crazy Frog IV",
                });
    }

    对应的SQL语句为:

    UPDATE
        [TestTable3] [t1]
    SET
        [t1].[Name] = 'Crazy Frog IV'
    WHERE
        [t1].[ID] = 5
    <!--如果受影响的记录数为0,则对应为下面的-->
    INSERT INTO [TestTable3]
    (
        [ID],
        [Name]
    )
    VALUES
    (
        5,
        'Crazy Frog'
    )

    2、 InsertOrUpdate<T>(ITable<T>, Expression<Func<T>>, Expression<Func<T, T>>, Expression<Func<T>>)

      此方法更新现有记录,如果不存在,则插入新记录,查询条件为指定的字段。

    声明:

    public static int InsertOrUpdate<T>(this ITable<T> target, Expression<Func<T>> insertSetter, Expression<Func<T, T>> onDuplicateKeyUpdateSetter, Expression<Func<T>> keySelector)

    参数:

    类型 名称 详细信息
    ITable<T>
    target
    目标表
    System.Linq.Expressions.Expression<System.Func<T>>
    insertSetter 插入数据的构造函数,表达式仅支持初始化目标表所包含的字段。
    System.Linq.Expressions.Expression<System.Func<T, T>> onDuplicateKeyUpdateSetter 更新数据的构造函数,表达式仅支持初始化目标表所包含的字段,接受表名作为参数。
    System.Linq.Expressions.Expression<System.Func<T>> keySelector 键字段选择器,指定必须使用哪些字段和值作为在INSERT和UPDATE操作之间进行选择的关键字段。表达式只支持目标表中所包含的字段初始化。指定的键字段值将被操作类型选择器用作键值。

    返回值:int类型,受影响的记录条数

    类型参数:T  表在model中所对应的类型

    使用示例:

    using (var db = new DataConnection())
    {
        db.GetTable<TestTable3>()
            .InsertOrUpdate(
                () => new TestTable3
                {
                    ID   = 5,
                    Name = "Crazy Frog",
                    Age = 25
                },
                t => new TestTable3
                {
                    Age = 30
                },
                () => new TestTable3
                {
                    Name = "Jimmy"
                }
            );
    
    }        

     对应的SQL语句为:

    UPDATE
        [TestTable3] [t1]
    SET
        [t1].[Age] = 30
    WHERE
        [t1].[Name] = “Jimmy”
    <!--如果受影响的条数为0,则对应下面的-->
    INSERT INTO [TestTable3]
    (
        [ID],
        [Name]
    )
    VALUES
    (
        5,
        'Crazy Frog'
    )
  • 相关阅读:
    Centos下安装Redis
    BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法
    BZOJ 4868 [Shoi2017]期末考试 ——三分 枚举
    BZOJ 4584 [Apio2016]赛艇 ——动态规划
    BZOJ 2806 [Ctsc2012]Cheat ——后缀自动机 单调队列优化DP
    BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA
    Topcoder SRMCards ——贪心
    CTSC 1999 家园 【网络流24题】星际转移
    BZOJ 3489 A simple rmq problem ——KD-Tree
    BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集
  • 原文地址:https://www.cnblogs.com/zlxd1990/p/8988963.html
Copyright © 2020-2023  润新知