分享

如何在网站开发中使用LINQ操作数据库

 张小龙net馆藏 2017-10-18

开始之前先简单的介绍一下LINQ

    LINQ作为一种数据查询编码方式,本身并不是独立的开发语言,也不能进行应用程序的开发。但是在ASP.NET 4.0中,通过C#语言继承LINQ查询的代码,可以在任何源代码文件中使用。

    查询是一种从数据源检索数据的表达式,通常使用专门的查询语言来表示。随着变成技术的不断发展,人们已经为各种数据源开发了不同的语言,编程人员不得不对每种数据源或数据格式进行有针对性的学习。而LINQ的出现则改变了这种情况,它可以使用通用的基本编码模式来查询和转换不同的数据源,如XML文档、SQL数据库、ADO.NET数据集和.NET集合中的数据等。

     

下面先看一个简单的LINQ查询的例子:

创建一个ASP.NET Web应用程序,在“Default.aspx.cs”文件中编写如下代码:

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     string[] wordArry = { "Lilei", "hANmeiMei", "zhAngSan", "LISi", "WangwU"};  
  4.     int i = 0;  
  5.     var upperLowerWords =  
  6.         from w in wordArry  
  7.         select new { Upper = w.ToUpper(), Lower = w.ToLower() };  
  8.   
  9.     foreach (var word in upperLowerWords)  
  10.     {  
  11.         Response.Write(wordArry[i] + "单词的大写为:" + word.Upper + "<BR>");  
  12.         Response.Write(wordArry[i] + "单词的小写为:" + word.Lower + "<BR>");  
  13.         i++;  
  14.     }  

运行结果如下:



查询表达式必须以from 为关键字的子句开头,并且必须以select或者group关键字的子句结尾。在第一个from子句和最后一个select 或者group子句之间,查询表达式可以包含一个或多个由下列关键字组成的可选子句:where、orderby、join、select等关键字。同时还可以使用Into关键字让join或group子句的结果能够作为同一查询表达式中附加查询子句的数据源。

(orderby关键字:Ascending关键字表示默认方式按照递增顺序排列。Descending表示关键字逆序排列。)

看几个例子了解一下:

  1. IEnumberable<User> userQuery =  
  2.     from age in User  
  3.     orderby user.age  
  4.     select age;  

  1. var userQueryByName =  
  2.     from u in User  
  3.     group u by u.age;  
  4.   
  5. foreach (var userGroup in userQuery)  
  6. {  
  7.     Console.WriteLine(userQuery.name);  
  8.     foreach (User user in userGroup)  
  9.     {  
  10.         Console.WriteLine("{0}", user.age);  
  11.     }  
  12. }  


  1. int[] arry1 = {1, 3, 5, 7, 9 };  
  2. int[] arry2 = {2, 4, 6, 8, 10, 11 };  
  3. var query = from val1 in arry1  
  4.             join var2 in arry2 on val1 + 1 equals var2  
  5.             select new { VAL1 = val1, VAL2 = var2 };  


  1. int[] arry = { 0, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };  
  2. var lint = arry.Select(iNum => iNum < 10 ? iNum : 0);  
  3. foreach (var temp1 in lint)  
  4. {  
  5.     Response.Write(temp1.ToString());  
  6. }  



下面来看一下如何在网站开发中使用LINQ操作数据库

    首先,在数据库中建立数据库 test(本人使用sqlserver2008),在其中建立表userinfo,如下:



    然后开始操作vs2010

1、创建ASP.NET Web应用程序。命名“LinqTest”

2、点击 “视图” --> “服务器资源管理器”。右键单击“数据连接”,选择“添加连接”


3、在“添加连接”对话框中按照提示信息填写,并测试连接,使配置成功。


4、在“服务器资源管理器”窗口中的数据连接节点下就可以看到刚才添加好的数据库了。


5、右键项网站名称,选择“添加新项”菜单。弹出框中选择“已安装模板”,列表中选择“LINQ to SQL类”,输入需要的名称,单机添加。


6、此时在网站根目录下就会看到相应的文件


7、双击 “TestLinqDataClasses.dbml”,然后从“服务器资源管理器”中将表拖进主窗口(”对象关系设计器“界面)。


9、打开文件“TestLinqDataClasses.designer.cs”,就可以看到已经自动生成了SQL实体类以及强类型 TestLinqDataClassesDataContext的定义

  1. [global::System.Data.Linq.Mapping.DatabaseAttribute(Name="test")]  
  2. public partial class TestLinqDataClassesDataContext : System.Data.Linq.DataContext  
  3. {  
  4.       
  5.     private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();  
  6.      
  7.   #region 可扩展性方法定义  
  8.   partial void OnCreated();  
  9.   #endregion  
  10.       
  11.     public TestLinqDataClassesDataContext() :   
  12.             base(global::System.Configuration.ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString, mappingSource)  
  13.     {  
  14.         OnCreated();  
  15.     }  
  16.       
  17.     public TestLinqDataClassesDataContext(string connection) :   
  18.             base(connection, mappingSource)  
  19.     {  
  20.         OnCreated();  
  21.     }  
  22.       
  23.     public TestLinqDataClassesDataContext(System.Data.IDbConnection connection) :   
  24.             base(connection, mappingSource)  
  25.     {  
  26.         OnCreated();  
  27.     }  
  28.       
  29.     public TestLinqDataClassesDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :   
  30.             base(connection, mappingSource)  
  31.     {  
  32.         OnCreated();  
  33.     }  
  34.       
  35.     public TestLinqDataClassesDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) :   
  36.             base(connection, mappingSource)  
  37.     {  
  38.         OnCreated();  
  39.     }  
  40.       
  41.     public System.Data.Linq.Table<userinfo> userinfo  
  42.     {  
  43.         get  
  44.         {  
  45.             return this.GetTable<userinfo>();  
  46.         }  
  47.     }  
  48. }  
  49.   
  50. [global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.userinfo")]  
  51. public partial class userinfo  
  52. {  
  53.       
  54.     private string _id;  
  55.       
  56.     private string _name;  
  57.       
  58.     private string _age;  
  59.       
  60.     private string _sex;  
  61.       
  62.     private string _job;  
  63.       
  64.     public userinfo()  
  65.     {  
  66.     }  
  67.       
  68.     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_id", DbType="NChar(10)")]  
  69.     public string id  
  70.     {  
  71.         get  
  72.         {  
  73.             return this._id;  
  74.         }  
  75.         set  
  76.         {  
  77.             if ((this._id != value))  
  78.             {  
  79.                 this._id = value;  
  80.             }  
  81.         }  
  82.     }  
  83.       
  84.     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_name", DbType="NChar(10)")]  
  85.     public string name  
  86.     {  
  87.         get  
  88.         {  
  89.             return this._name;  
  90.         }  
  91.         set  
  92.         {  
  93.             if ((this._name != value))  
  94.             {  
  95.                 this._name = value;  
  96.             }  
  97.         }  
  98.     }  
  99.       
  100.     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_age", DbType="NChar(10)")]  
  101.     public string age  
  102.     {  
  103.         get  
  104.         {  
  105.             return this._age;  
  106.         }  
  107.         set  
  108.         {  
  109.             if ((this._age != value))  
  110.             {  
  111.                 this._age = value;  
  112.             }  
  113.         }  
  114.     }  
  115.       
  116.     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_sex", DbType="NChar(10)")]  
  117.     public string sex  
  118.     {  
  119.         get  
  120.         {  
  121.             return this._sex;  
  122.         }  
  123.         set  
  124.         {  
  125.             if ((this._sex != value))  
  126.             {  
  127.                 this._sex = value;  
  128.             }  
  129.         }  
  130.     }  
  131.       
  132.     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_job", DbType="NVarChar(50)")]  
  133.     public string job  
  134.     {  
  135.         get  
  136.         {  
  137.             return this._job;  
  138.         }  
  139.         set  
  140.         {  
  141.             if ((this._job != value))  
  142.             {  
  143.                 this._job = value;  
  144.             }  
  145.         }  
  146.     }  
  147. }  

10、现在就可以在网站中使用LINQ查询数据库了。

在“Default.aspx.cs”文件的“Page_Load”事件中添加查询代码,就可以了。如下:

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     TestLinqDataClassesDataContext testUser = new TestLinqDataClassesDataContext();  
  4.   
  5.     var userQuery = from u in testUser.userinfo  
  6.                     select u;  
  7.     foreach (var value in userQuery)  
  8.     {  
  9.         Response.Write("姓名:" + value.name + " 性别:" + value.sex +  " 年龄" + value.age + "<BR>");  
  10.     }  
  11. }  

运行结果如下:


和我们数据库中的结果一致。


至此,我们以及完成了LINQ在项目中的使用。


参考文章:

《ASP.NET4.0从入门到精通》 张正礼 王坚宁编著 清华大学出版社2011年7月第1版


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多