• LINQ增删改代码示例 子曰


    一、带参查询:

    System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]

        
    public IQueryable GetProductByProductID(int productID)

    {

            var product 
    = from p in db.Products

                          
    where p.ProductID == productID

                          select p;

            
    return product;

        }


    2简单的代码解释:

    1)  首先是一段声明,告诉自动识别系统该方法是查询方法。

    2)  注意我们使用了IQueryable类型,该类型是返回值的类型,可以直接作为Datasource使用。

    3)  然后是LINQ语句,意为从db中的Products表(已经对象化)选取ProductID=参数productID的记录

    4)  最后返回product(IQueryable类型)

     

    二、插入一条记录

    [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]

        
    public bool AddProduct(string productName, int? supplierID, int? categoryID, string quantityPerUnit,decimal? unitPrice, short? unitsInStock, short? unitsOnOrder, short? reorderLevel,bool discontinued)

        
    {

            Product nproduct 
    = new Product();

            nproduct.ProductName 
    = productName;

            nproduct.SupplierID 
    = supplierID;

            nproduct.CategoryID 
    = categoryID;

            nproduct.QuantityPerUnit 
    = quantityPerUnit;

            nproduct.UnitPrice 
    = unitPrice;

            nproduct.UnitsInStock 
    = unitsInStock;

            nproduct.UnitsOnOrder 
    = unitsOnOrder;

            nproduct.ReorderLevel 
    = reorderLevel;

            nproduct.Discontinued 
    = discontinued;

            db.Products.InsertOnSubmit(nproduct);

            db.SubmitChanges();

            
    return true;

              

    }


    2简单的代码解释:

    1)        首先是一段声明,告诉自动识别系统该方法是插入方法。

    2)        创建了一个Product的实例 nproduct(映射到Product表的一行)

    3)        nproduct的属性依次赋值

    4)        确认一个对db.Products的插入操作,插入记录为nproduct

    5)        通过SubmitChanges()方法将对象中改变的数据存入数据库

     

    三、更新一条记录

    [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]

        
    public bool UPProduct(int productID,string productname)

        
    {

            

                Product pro 
    = db.Products.Single(b => b.ProductID == productID);

                pro.ProductName 
    = productname;

                

                db.SubmitChanges();

           

            
    return true;

    }



    2简单的代码解释:

    1)        首先是一段声明,告诉自动识别系统该方法是更新方法。

    2)        创建了一个Product的实例 pro(映射到Product表的某一行)

    3)        为了确

    定是哪一行的记录,我们使用了一个LAMBDA表达式,该表达式意为:Product表中字段ProductID与参数productID相等的一行。表达式为:b => b.ProductID == productID

    4)        为了简单起见,我们单独修改了ProductName这一个字段,将参数productname赋值给它

    5)        通过SubmitChanges()方法将对象中改变的数据存入数据库

     

    四、删除一条记录

    [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]

        
    public bool DeletProduct(int productID)

        
    {

            
    try

            
    {

                Product pro 
    = db.Products.Single(b => b.ProductID == productID);

                db.Products.DeleteOnSubmit(pro);

                db.SubmitChanges();

            }


            
    catch 

            
    {

            }


            
    return true;

    }

     

    2简单的代码解释:

    1)        首先是一段声明,告诉自动识别系统该方法是删除方法。

    2)        创建了一个Product的实例 pro(映射到Product表的某一行)

    3)        为了确定是哪一行的记录,我们使用了一个LAMBDA表达式,该表达式意为:Product表中字段ProductID与参数productID相等的一行。表达式为:b => b.ProductID == productID

    4)        确认一个对db.Products的删除操作,删除记录pro

    5)        通过SubmitChanges()方法将对象中改变的数据存入数据库

    6)        由于存在外键的约束,我们不能删除原表中的一条记录,因此我们使用try尝试删除,如果失败则终止,我们可以删除一条我们新增的记录。

    它是如何工作的?

    我们为中间层的Productbll类新增了4个方法。分别为:

    GetProductByProductID

    AddProduct

    UPProduct

    DeletProduct

    这些方法都是直接操作于对象化的数据,除了查询操作可以直接使用LINQ语句获取对象内容,任何其他有关于要对数据库进行修改的方法都需要db.SubmitChanges()方法进行确认,因为在确认之前,数据仅仅在DataContext实例中(应该是内存中)被修改,只有在确认之后,才会将改变应用到数据库中。之后我们在表示层中通过调用这些方法,来完成我们所需要的操作。

    小结:

    这一章中我们在中间层中实现了插入,更新和删除的方法。因为在中间层中只有db.SubmitChanges()操作是数据访问,而其他操作都是逻辑上的(非实体的)访问与修改,所以我们没有必要把db.SubmitChanges()方法单独去放在另外一层之中。

    我们还用到了形如(b => b.ProductID == productID)这样的LAMBDA表达式。Lambda表达式的语法非常简洁。语法如下:(参数列表) => 表达式或者语句块。参数个数:可以有多个参数,一个参数,或者无参数。具体的用法可以查看更为细致的基础教程,我们这里以结构和方法为主。下一章中我们将在中间层使用LINQ语句查询符合条件的记录的汇总情况(如:总价、平均价格)。以前这些内容我们可能会将这些记录先传到表示层中,然后再表示层中通过操作DataTable等方法去处理这类问题,因为在中间层我们无法获得相关数据内容以及进行遍历。而使用LINQ将会使得这些工作变得简单。


     

     部分代码引用地址:http://www.cnblogs.com/ch00694534/archive/2008/04/03/1135444.html

     

  • 相关阅读:
    把EXE可执行文件等作为资源包含在Delphi编译文件中
    delphi怎么做桌面滚动文字?
    cxGrid控件过滤筛选后如何获更新筛选后的数据集
    我的ecshop二次开发经验分享
    ECSHOP 数据库结构说明 (适用版本v2.7.3)
    cxGrid 怎样才能让不自动换行 WordWrap:=false
    vi notes
    ODI中显示us7ascii字符集的测试
    ODI 11g & 12c中缓慢变化维(SCD)的处理机制
    ODI中的临时接口
  • 原文地址:https://www.cnblogs.com/suixufeng/p/3336101.html
Copyright © 2020-2023  润新知