Linq专题之创建Linq查询表达式

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对四种对象的查询方法,后面我们会有更详细的讲解。

每天早上敲醒自己的不是闹钟,是夢想!

猜你喜欢

转载自blog.csdn.net/weixin_42339460/article/details/80665479