繁体   English   中英

如何在lambda表达式中插入记录以及缩短代码长度的可能方法

[英]How to insert a record in lambda expression and possible way to shorten the length of code

private void SaveNewLogsheet01Record()
        {
            try
            {
                Logsheet01 Header = new Logsheet01();
                Header.DrNO = drNO.Text;
                Header.DocDate = dtPicker.Value;  
                Header.RecNum = RecNum.Value;  
                Header.DocuTitle = DocumentHeader.Text;  

                SaveRec01(Header);                    
            }
            catch (Exception) { }
 }

     private void SaveNewLogsheet02Record()
        {
            try
            {
                Logsheet02 Details = new Logsheet02();
                Details.RecNum = RecNum.Value;
                Details.DataFile01 = GlobalVar.DataRec01;                        
                Details.DataFile02 = GlobalVar.DataRec02;                        
                Details.DataFile03 = GlobalVar.DataRec03;                        
                Details.UserName = GlobalVar.UserInfo;                        

                SaveRec02(Details);                    
            }
            catch (Exception) { }
 }

private void SaveRec01(Logsheet01 Header) <-- is this necessary in c#?
    {
        try
        {
            using (DBDataContext DB = new DBDataContext()) 
            {
                DB.Delivery_HeaderRECs.InsertOnSubmit(Header);
                DB.SubmitChanges();
                DB.Connection.Close();
            }
        }
        catch (Exception) { }
    }

private void SaveRec02(Logsheet02 Header)
    {
        try
        {
            using (DBDataContext DB = new DBDataContext()) 
            {
                DB.Logsheet0.InsertOnSubmit(Header);
                DB.SubmitChanges();
                DB.Connection.Close();
            }
        }
        catch (Exception) { }
    }

我只是想找到一种新的方法来在数据库上插入记录,如果我在表上有一个带有多个插入的表格,现在使我的代码更整洁,更短:例如“ Logsheet01”和“ Logsheet02”,“ Logsheet03”和我希望我的代码缩短。 有什么办法可以将saveRec01函数放到3个表的一个函数中吗?


有没有办法我可以像这样:

private void SaveRec01(Logsheet01 Header)
    {
        if(Saving == "Logsheet01") {
           using(DBDatacontex DB = new DBDatacontex) {
               DB.Logsheet01.InsertOnSubmit(Header);
               DB.SubmitChanges();
               DB.Connection.Close();
           }
        }elseif (Saving == "Logsheet02") {
           using(DBDatacontex DB = new DBDatacontex) {
               DB.Logsheet02.InsertOnSubmit(Header);
               DB.SubmitChanges();
               DB.Connection.Close();
           }
        } //etc..
    }

还是插入记录列表的新Lambda表达式?

你可以写:

Logsheet01 Header = new Logsheet01({     
  DrNO = drNO.Text,
  DocDate = dtPicker.Value,
  RecNum = RecNum.Value,
  DocuTitle = DocumentHeader.Text  
 });


Header.SaveRecord();

创建一个像这样的函数:

private void SaveRecord()

{
         using(DBDatacontex DB = new DBDatacontex) {
         //I used this because the SaveRecord function is in the same class as the object used to create the record
         DB.Delivery_HeaderRECs.InsertOnSubmit(this);
         DB.SubmitChanges(); }


}

}

如果您希望摆脱重复的代码,而每次仅指定数据库操作的“实质”,则可以将所有样板代码移动到一个接受Action的方法中,该方法定义了操作的变量部分,如下所示:

// Wrapper for our database operation.
private void PerformDbOperationAndSubmit(Action<DBDataContext> action)
{
    using (DBDataContext DB = new DBDataContext()) 
    {
        // Invoke our arbitrary action over the data context.
        action(DB);

        DB.SubmitChanges();
        DB.Connection.Close();
    }
}

// Object creation (modified for the sake of brevity).
private void SaveNewLogsheet01Record()
{
    Logsheet01 Header = new Logsheet01();

    // Fill Header properties here.

    PerformDbOperationAndSubmit(dx => dx.Delivery_HeaderRECs.InsertOnSubmit(Header));                    
}

private void SaveNewLogsheet02Record()
{
    Logsheet02 Details = new Logsheet02();

    // Fill Details properties here.

    PerformDbOperationAndSubmit(dx => dx.Logsheet0.InsertOnSubmit(Details));                     
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM