Linq专题之创建Linq查询表达式
本节我们主要介绍一下如何创建查询集合类型,关系数据库类型,DataSet对象类型和XML类型的数据源的Linq查询表达式。
下面在实例代码ReadyCollectionData()函数创建了准备的数据源:
1、创建集合类型的查询。
创建一个UserBaseInfo类:
public class UserBaseInfo
{
private List<string> aliasname;
private int id;
private string email;
private int roleid;
private string username; public UserBaseInfo(int Id, string userName, string email, List<string> aliasName)
: this(Id, userName, email)
{ this.aliasname = aliasName;
} public UserBaseInfo(int Id, string userName, string email)
{
this.id = Id;
this.username = userName;
this.email = email;
} public UserBaseInfo(int Id, string userName, string email, int roleId)
: this(Id, userName, email)
{
this.roleid = roleId;
}
public UserBaseInfo(int Id, string userName, string email, int roleId, List<string> aliasName)
: this(Id, userName, email, roleId)
{
this.aliasname = aliasName;
} public List<string> AliasName
{
get { return this.aliasname; }
set { this.aliasname = AliasName; }
} public int ID
{
get { return this.id; }
set
{
this.id = ID;
}
} public string Email
{
get { return this.email; }
set { this.email = Email; }
} public int RoleId
{
get { return this.roleid; }
set { this.roleid = RoleId; }
} public string UserName
{
get { return this.username; }
set { this.username = UserName; }
}
}
ReadyCollectionData方法准备数据源:
private void ReadyCollectionData()
{
//创建一个数组
int[] datasource = new int[]; for(int i=;i<;i++)
{
datasource[i] = i;
} //准备数据源创建一个泛型列表元素类型为UserBaseInfo
List<UserBaseInfo> users = new List<UserBaseInfo>(); for (int i = ; i < ; i++)
{
users.Add(new UserBaseInfo(i, "user0" + i.ToString(), "user0" + i.ToString() + "@web.com"));
}
}
下面我们来创建一个Linq查询表达式来查询出ID大于3的元素:
//以下是创建Linq查询
var result = from u in users where u.ID >
select u;
最终的代码:
private void ReadyCollectionData()
{
//创建一个数组
int[] datasource = new int[]; for (int i = ; i < ; i++)
{
datasource[i] = i;
} //准备数据源创建一个泛型列表元素类型为UserBaseInfo
List<UserBaseInfo> users = new List<UserBaseInfo>(); for (int i = ; i < ; i++)
{
users.Add(new UserBaseInfo(i, "user0" + i.ToString(), "user0" + i.ToString() + "@web.com"));
} //以下是创建Linq查询
var result = from u in users where u.ID >
select u; foreach (var u in result)
{
Response.Write("ID:" + u.ID + "</br>" + "username:" + u.UserName+"</br>");
} }
看看输出结果:

是不是已经完成过滤了。其实和sql的查询语句很像。
2、创建DataSet类型的查询表达式。
创建一个userinfo表,做默认数据如下:

然后我们的代码里面的函数ReadyDataSetData()用来获取userinfo表里面的数据,通过linq进行过滤。
private void ReadyDataSetData()
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LinqDBConnectionString"].ConnectionString); string cmdText = "SELECT * FROM UserInfo";
///创建执行SQL语句的命令
SqlDataAdapter da = new SqlDataAdapter(cmdText, con);
///打开数据库的连接
con.Open();
///执行查询操作
DataSet ds = new DataSet();
da.Fill(ds, "UserInfo");
con.Close(); //以下为linq查询表达式:
var result = from u in ds.Tables["userinfo"].AsEnumerable()
where u.Field<int>("id") >
select u; }
可以看出我们的代码中是过滤出 id大于5的元素。
看到查询结果和我们预想的一样。
3、创建sqlserver数据库类型的查询表达式。
我们依然用sql中的userinfo表
private void ReadyDatabaseData()
{ ///准备数据源,创建LinqDB数据库的数据上下文类的实例
LinqDBDataContext db = new LinqDBDataContext(ConfigurationManager.ConnectionStrings["LinqDBConnectionString"].ConnectionString);
Table<userinfo> users = db.userinfo;
///以下为LINQ查询表达式 var result = from u in users
where u.id > && u.id <
select u;
}
看代码是过滤 id大于3且小于5的,那么就只有id为4的了。看结果:

4、最后一个查询,创建XML查询语句。
private void ReadyXmlData()
{ ///准备数据源,创建XML类型的数据源
string xmlString =
"<Books>"
+ "<Book ID=\"101\">"
+ "<No>00001</No>"
+ "<Name>Book 0001</Name>"
+ "<Price>100</Price>"
+ "<Remark>This is a book 00001.</Remark>"
+ "</Book>"
+ "<Book ID=\"102\">"
+ "<No>00002</No>"
+ "<Name>Book 0002</Name>"
+ "<Price>200</Price>"
+ "<Remark>This is a book 00002.</Remark>"
+ "</Book>"
+ "<Book ID=\"103\">"
+ "<No>0006</No>"
+ "<Name>Book 0006</Name>"
+ "<Price>600</Price>"
+ "<Remark>This is a book 0006.</Remark>"
+ "</Book>"
+ "</Books>";
///导入XML文件
XElement xmlDoc = XElement.Parse(xmlString);
///以下为LINQ查询表达式 var result = from e in xmlDoc.Elements("Book")
where (string)e.Element("Name") == "Book 0002"
select e; foreach (var u in result)
{
Response.Write("NO:" + (string)u.Element("No") + "</br>" + "Name:" + (string)u.Element("Name") + "</br>");
}
}
ReadyXmlData方法中我们创建了一个xml文档,然后过滤出Book元素且Name为"Book ooo2"的元素。

我们先简单了解了一下Linq对四种对象的查询方法,后面我们会有更详细的讲解。
Linq专题之创建Linq查询表达式的更多相关文章
- 认识LINQ的第一步---从查询表达式开始
学习和使用C#已经有2个月了,在这两个月的学习中,深刻体会到,C#这门语言还真不适合编程初学者学习,因为它是吸取了很多其他语言,不仅是面向对象,还包括函数式语言的很多特性,导致它变成特性大爆炸的语言. ...
- linq to sql 动态构建查询表达式树
通过Expression类进行动态构造lamda表达式. 实现了以下几种类型,好了代码说话: public Expression<Func<T, bool>> GetAndLa ...
- Linq专题列表
什么是Linq? Linq(Language-Integrated Query),即语言集成查询.是微软的一项新技术,能够将查询功能直接引入.NET Framework3.5 所支持的编程语言(C#, ...
- 查询表达式和LINQ to Objects
查询表达式实际上是由编译器“预处理”为“普通”的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的介绍 LINQ中的基础概念 降低两种数据 ...
- Linq查询表达式
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...
- 《C#本质论》读书笔记(15)使用查询表达式的LINQ
15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable<string> sel ...
- LINQ 查询表达式(C# 编程指南)
语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其他 .NET 语言)的基础上. 借助于 LINQ,查询现在 ...
- Linq专题之Linq查询from子句
Linq查询表达式包含8个常用的子句:from.where.select.join.into.orderby.group.let.我们来看看详细的说明. from: 指定查询操作的 ...
- Linq专题之Lambda表达式
这一节我们讲的Lambda表达式跟匿名函数有关.Lambda表达式就是一个匿名函数,它可以包含表达式和语句,并且可以创建委托和表达式树. Lambda表达式的组成: 输入参数.Lambda运算符(=& ...
随机推荐
- Lists in Prolog
Symbols in Prolog: atom variable number list (how to assembly and take them apart) Lists are very ...
- java -jar shell 启动、停止
启用 vi start.sh #!/bin/sh # ################################################################## # Powe ...
- Linux shell crontab expdp 定时任务逻辑备份 定时删除旧文件
点击进入:Window bat expdp 定时任务逻辑备份 定时删除N天前的旧文件 创建sh脚本 [oracle@localhost ~]$ vi logicbackup.sh 添加脚本内容 #!/ ...
- phonegap3.0 simple
environment: window8(64bit) First you go to the phonegap site and install it. note that installing y ...
- SQLSERVER建立MYSQL连接服务器
1. 在SQL SERVER端安装MYSQL的ODBC驱动 2. 在ODBC数据源添加MYSQL(控制面板\所有控制面板项\管理工具) 在用户DSN 和系统DSN添加配置驱动程序 注:字符集一定要和M ...
- jquerymobile标签-属性手册
Button data-role="button" data-corners true | false data-icon home | delete | plus | arr ...
- Promising Linking
Future/Promise 执行逻辑 scala Future 有几个要点,第一个是 tryAwait 需要借助 CowndownLatch 实现,第二个是可以在 Promise 挂载回调函数 首先 ...
- [under the hood]Reduce EXE and DLL Size with LIBCTINY.LIB
Matt Pietrek Download the code for this article: Hood0101.exe (45KB) W ay back in my October 1996 co ...
- Spark和hadoop的关系
1. Spark VSHadoop有哪些异同点? Hadoop:分布式批处理计算,强调批处理,常用于数据挖掘和数据分析. Spark:是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速, ...
- DotNetBar RibbonControl控件office2007风格
在使用DotNetBar RibbonControl控件的时候如果想吧效果做成下图这种效果 把主窗体继承Office2007RibbonForm 然后要删除删除styleManager1 才会出现上图 ...