zoukankan      html  css  js  c++  java
  • Linq专题之创建Linq查询表达式

      本节我们主要介绍一下如何创建查询集合类型,关系数据库类型,DataSet对象类型和XML类型的数据源的Linq查询表达式。

      下面在实例代码ReadyCollectionData()函数创建了准备的数据源:

    1、创建集合类型的查询。

          创建一个UserBaseInfo类:    

     1  public class UserBaseInfo
     2     {
     3         private List<string> aliasname;
     4         private int id;
     5         private string email;
     6         private int roleid;
     7         private string username;
     8 
     9         public UserBaseInfo(int Id, string userName, string email, List<string> aliasName)
    10             : this(Id, userName, email)
    11         {
    12 
    13             this.aliasname = aliasName;
    14         }
    15 
    16         public UserBaseInfo(int Id, string userName, string email)
    17         {
    18             this.id = Id;
    19             this.username = userName;
    20             this.email = email;
    21         }
    22 
    23         public UserBaseInfo(int Id, string userName, string email, int roleId)
    24             : this(Id, userName, email)
    25         {
    26             this.roleid = roleId;
    27         }
    28 public UserBaseInfo(int Id, string userName, string email, int roleId, List<string> aliasName)
    29             : this(Id, userName, email, roleId)
    30         {
    31             this.aliasname = aliasName;
    32         }
    33 
    34         public List<string> AliasName
    35         {
    36             get { return this.aliasname; }
    37             set { this.aliasname = AliasName; }
    38         }
    39 
    40         public int ID
    41         {
    42             get { return this.id; }
    43             set
    44             {
    45                 this.id = ID;
    46             }
    47         }
    48 
    49         public string Email
    50         {
    51             get { return this.email; }
    52             set { this.email = Email; }
    53         }
    54 
    55         public int RoleId
    56         {
    57             get { return this.roleid; }
    58             set { this.roleid = RoleId; }
    59         }
    60 
    61         public string UserName
    62         {
    63             get { return this.username; }
    64             set { this.username = UserName; }
    65         }
    66     }

    ReadyCollectionData方法准备数据源:

     1 private void ReadyCollectionData()
     2         {
     3             //创建一个数组
     4             int[] datasource = new int[100];
     5 
     6             for(int i=0;i<100;i++)
     7             {
     8                 datasource[i] = i;
     9             }
    10 
    11             //准备数据源创建一个泛型列表元素类型为UserBaseInfo
    12             List<UserBaseInfo> users = new List<UserBaseInfo>();
    13 
    14             for (int i = 1; i < 10; i++)
    15             {
    16                 users.Add(new UserBaseInfo(i, "user0" + i.ToString(), "user0" + i.ToString() + "@web.com"));
    17             }
    18         }

    下面我们来创建一个Linq查询表达式来查询出ID大于3的元素:

    1 //以下是创建Linq查询
    2             var result = from u in users
    3 
    4                 where u.ID > 3
    5                 select u;

    最终的代码:

     1  private void ReadyCollectionData()
     2         {
     3             //创建一个数组
     4             int[] datasource = new int[100];
     5 
     6             for (int i = 0; i < 100; i++)
     7             {
     8                 datasource[i] = i;
     9             }
    10 
    11             //准备数据源创建一个泛型列表元素类型为UserBaseInfo
    12             List<UserBaseInfo> users = new List<UserBaseInfo>();
    13 
    14             for (int i = 1; i < 10; i++)
    15             {
    16                 users.Add(new UserBaseInfo(i, "user0" + i.ToString(), "user0" + i.ToString() + "@web.com"));
    17             }
    18 
    19 
    20             //以下是创建Linq查询
    21             var result = from u in users
    22 
    23                          where u.ID > 3
    24                          select u;
    25 
    26             foreach (var u in result)
    27             {
    28                 Response.Write("ID:" + u.ID + "</br>" + "username:" + u.UserName+"</br>");
    29             }
    30 
    31         }

    看看输出结果:

    是不是已经完成过滤了。其实和sql的查询语句很像。

    2、创建DataSet类型的查询表达式。

    创建一个userinfo表,做默认数据如下:

    然后我们的代码里面的函数ReadyDataSetData()用来获取userinfo表里面的数据,通过linq进行过滤。

     1 private void ReadyDataSetData()
     2         {
     3             SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LinqDBConnectionString"].ConnectionString);
     4 
     5             string cmdText = "SELECT * FROM UserInfo";
     6             ///创建执行SQL语句的命令
     7             SqlDataAdapter da = new SqlDataAdapter(cmdText, con);
     8             ///打开数据库的连接
     9             con.Open();
    10             ///执行查询操作
    11             DataSet ds = new DataSet();
    12             da.Fill(ds, "UserInfo");
    13             con.Close();
    14 
    15             //以下为linq查询表达式:
    16             var result = from u in ds.Tables["userinfo"].AsEnumerable()
    17                 where u.Field<int>("id") > 5
    18                 select u;
    19 
    20         }

    可以看出我们的代码中是过滤出 id大于5的元素。

    看到查询结果和我们预想的一样。

    3、创建sqlserver数据库类型的查询表达式。

    我们依然用sql中的userinfo表

     1  private void ReadyDatabaseData()
     2         {    ///准备数据源,创建LinqDB数据库的数据上下文类的实例
     3             LinqDBDataContext db = new LinqDBDataContext(ConfigurationManager.ConnectionStrings["LinqDBConnectionString"].ConnectionString);
     4             Table<userinfo> users = db.userinfo;
     5             ///以下为LINQ查询表达式
     6 
     7             var result = from u in users
     8                          where u.id > 3 && u.id < 5
     9                          select u;
    10         }

    看代码是过滤 id大于3且小于5的,那么就只有id为4的了。看结果:

    4、最后一个查询,创建XML查询语句。

     1 private void ReadyXmlData()
     2         {    ///准备数据源,创建XML类型的数据源
     3             string xmlString =
     4             "<Books>"
     5               + "<Book ID="101">"
     6                  + "<No>00001</No>"
     7                  + "<Name>Book 0001</Name>"
     8                  + "<Price>100</Price>"
     9                  + "<Remark>This is a book 00001.</Remark>"
    10                + "</Book>"
    11                + "<Book ID="102">"
    12                  + "<No>00002</No>"
    13                  + "<Name>Book 0002</Name>"
    14                  + "<Price>200</Price>"
    15                  + "<Remark>This is a book 00002.</Remark>"
    16                + "</Book>"
    17                + "<Book ID="103">"
    18                  + "<No>0006</No>"
    19                  + "<Name>Book 0006</Name>"
    20                  + "<Price>600</Price>"
    21                  + "<Remark>This is a book 0006.</Remark>"
    22                + "</Book>"
    23              + "</Books>";
    24 ///导入XML文件
    25             XElement xmlDoc = XElement.Parse(xmlString);
    26             ///以下为LINQ查询表达式
    27 
    28             var result = from e in xmlDoc.Elements("Book")
    29                          where (string)e.Element("Name") == "Book 0002"
    30                          select e;
    31 
    32             foreach (var u in result)
    33             {
    34                 Response.Write("NO:" + (string)u.Element("No") + "</br>" + "Name:" + (string)u.Element("Name") + "</br>");
    35             }
    36         }

    ReadyXmlData方法中我们创建了一个xml文档,然后过滤出Book元素且Name为"Book ooo2"的元素。

    我们先简单了解了一下Linq对四种对象的查询方法,后面我们会有更详细的讲解。

  • 相关阅读:
    videojs播放直播源rtmp时画面在左上角解决方案
    常用git操作命令
    vue使用vue-video-player在直播中的应用
    element-ui隐藏组件scrollbar的使用
    Array.reduce()学习
    阿里云物联网套件(iot)设备间通信(M2M)在web端的实践
    前端axios下载excel(二进制)
    nodejs连接阿里云物联网套件(mqtt)
    base64格式图片转换为FormData对象进行上传
    NodeJS之微信开发
  • 原文地址:https://www.cnblogs.com/yplong/p/5412138.html
Copyright © 2011-2022 走看看