linq - 使用 linq 保存新记录或更新现有记录

标签 linq

这是我用linq保存记录的方式:(我的Q在下面)

    public void SaveEmployee(Employee employee)
    {

        using (BizNetDB db = new BizNetDB())
        {
            BizNet.SqlRep.Data.Employee oldEmployee = (from e in db.Employees
                                                       where e.EmployeeID == employee.EmployeeID
                                                   select e).SingleOrDefault();
            if (oldEmployee == null)
            {
                oldEmployee = new BizNet.SqlRep.Data.Employee();
                oldEmployee.BirthDate = employee.BirthDate;
                oldEmployee.WorkRole = employee.WorkRole;
                oldEmployee.CurrentFlag = employee.CurrentFlag;
                oldEmployee.HireDate = employee.HireDate;
                ...
                db.Employees.InsertOnSubmit(oldEmployee);
            }
            else
            {
                if (oldEmployee.BirthDate.Date != employee.BirthDate.Date)
                    oldEmployee.BirthDate = employee.BirthDate;
                if (oldEmployee.CurrentFlag != employee.CurrentFlag)
                    oldEmployee.CurrentFlag = employee.CurrentFlag;
                if (oldEmployee.HireDate.Date != employee.HireDate.Date)
                    oldEmployee.HireDate = employee.HireDate;
            }

            oldEmployee.ModifiedDate = DateTime.Now;
            db.SubmitChanges();
            employee.EmployeeID = oldEmployee.EmployeeID;
        }
    }

我的问题是:

一个。 if 语句是必要的吗?为什么不在没有的情况下进行分配 查看? mybe if block 需要更多的 cpu ..

为什么要把新记录 block 和更新 block 分开?

当记录是新的时候它会做

db.Employees.InsertOnSubmit(oldEmployee);

然后继续更新例程...

最佳答案

您这样做的方式需要 if 语句的唯一原因是新建并插入它,因此我会为此使用 if 语句。

我会这样做:

 public void SaveEmployee(Employee employee)
{
    using (BizNetDB db = new BizNetDB())
    {
        BizNet.SqlRep.Data.Employee oldEmployee = 
                    (from e in db.Employees
                    where e.EmployeeID == employee.EmployeeID
                    select e).SingleOrDefault();

        if (oldEmployee == null)
        {
            oldEmployee = new BizNet.SqlRep.Data.Employee();
            db.Employees.InsertOnSubmit(oldEmployee);
        }

        if (oldEmployee.BirthDate.Date != employee.BirthDate.Date)
            oldEmployee.BirthDate = employee.BirthDate;
        if (oldEmployee.CurrentFlag != employee.CurrentFlag)
            oldEmployee.CurrentFlag = employee.CurrentFlag;
        if (oldEmployee.HireDate.Date != employee.HireDate.Date)
            oldEmployee.HireDate = employee.HireDate;

        oldEmployee.ModifiedDate = DateTime.Now;
        db.SubmitChanges();
        employee.EmployeeID = oldEmployee.EmployeeID;
    }
}

我还认为有一种方法可以将一个对象的属性映射到另一个对象,但目前我没有想到。无论如何,它可能对您尝试做的事情不起作用,因为您似乎稍后会使用 ModifiedDate 和 EmployeeID 做一些其他事情。

关于linq - 使用 linq 保存新记录或更新现有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1375030/

相关文章:

c# - 将 DefaultIfEmpty 与对象一起使用?

linq - 在使用 LINQ 的情况下

c# - 如何交叉多个IEnumerable?

linq - 在 PowerShell 中查询 LINQ 样式的列表

vb.net - Linq、VB - 匿名类型无法转换为匿名类型

c# - 检查 List<T> 中是否存在以下项目

C#:当派生类及其基类都实现 IEnumerable 时,在派生迭代器类上使用 LINQ

c# - 如何从 List() 中获取整数值的运行总计?

mysql - 如何通过 nhibernate/fluent nHibernate 使用 MYSQL BIT_COUNT 函数?

c# - 使用通用列表作为数据源和自动生成列的 Gridview