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'
)

猜你喜欢

转载自www.cnblogs.com/zlxd1990/p/8988963.html

相关文章