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运算符(=& ...
随机推荐
- HDU 5902 GCD is Funny 数学
GCD is Funny 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5902 Description Alex has invented a ne ...
- VS2010在运行状态下编辑代码
在VS2010环境下,当程序处于调试运行状态时,编辑代码会出现下图提示框: 这就给边编辑代码边查看程序运行效果带来不便. 解决方法:在程序没有运行的时候,打开菜单“工具”——>“选项”——> ...
- 删除数据报ORA-00600: internal error code, arguments: [ktbesc_plugged]
Oracle在删除数据是以下错误: ORA-00600: internal error code, arguments: [ktbesc_plugged], [], [], [], [], [], [ ...
- 基于SlidePanelLayout实现ResideMenu
同步发表于http://avenwu.net/2015/02/24/custom_slide_panel_layout_as_reside_style_on_dribble_and_qq Fork o ...
- Android NDK 同时编译多个Module
LOCAL_PATH := $(call my-dir) ## ## NDK 支持同时编译多个Module: ## 在配置的时候,每个Module需要 以 include $(CLEAR_VARS)开 ...
- LINUNX下PHP下载中文文件名代码
function get_basename($filename){ return preg_replace('/^.+[\\\\\\/]/', '', ...
- android私有文件夹的访问
首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下. 所有内部存储中保存的文件在用户卸载应用的时候会被删除. 一. files ...
- MyBatis+MySQL 返回插入的主键ID
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="i ...
- SSAS:OLE DB 错误: OLE DB 或 ODBC 错误 : Login failed for user 'NT Service\MSSQLServerOLAPService'
问题描述 按照微软官方教程尝试使用SSAS做OLAP时,出现如下错误信息: Severity Code Description Project File Line Suppression State ...
- DNS反射攻击阻止
刚搭的dns server就有贱人跑dns反射放大攻击,据说bind高版本没洞,但是日志刷刷的跑,感觉也不放心,而且毕竟dns是返回了请求的,所以找了点资料备忘 先设定不受限制的网段 iptables ...