本节我们主要介绍一下如何创建查询集合类型,关系数据库类型,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查询表达式的更多相关文章

  1. 认识LINQ的第一步---从查询表达式开始

    学习和使用C#已经有2个月了,在这两个月的学习中,深刻体会到,C#这门语言还真不适合编程初学者学习,因为它是吸取了很多其他语言,不仅是面向对象,还包括函数式语言的很多特性,导致它变成特性大爆炸的语言. ...

  2. linq to sql 动态构建查询表达式树

    通过Expression类进行动态构造lamda表达式. 实现了以下几种类型,好了代码说话: public Expression<Func<T, bool>> GetAndLa ...

  3. Linq专题列表

    什么是Linq? Linq(Language-Integrated Query),即语言集成查询.是微软的一项新技术,能够将查询功能直接引入.NET Framework3.5 所支持的编程语言(C#, ...

  4. 查询表达式和LINQ to Objects

    查询表达式实际上是由编译器“预处理”为“普通”的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的介绍 LINQ中的基础概念 降低两种数据 ...

  5. Linq查询表达式

    目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...

  6. 《C#本质论》读书笔记(15)使用查询表达式的LINQ

    15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable<string> sel ...

  7. LINQ 查询表达式(C# 编程指南)

    语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其他 .NET 语言)的基础上.  借助于 LINQ,查询现在 ...

  8. Linq专题之Linq查询from子句

    Linq查询表达式包含8个常用的子句:from.where.select.join.into.orderby.group.let.我们来看看详细的说明.      from:      指定查询操作的 ...

  9. Linq专题之Lambda表达式

    这一节我们讲的Lambda表达式跟匿名函数有关.Lambda表达式就是一个匿名函数,它可以包含表达式和语句,并且可以创建委托和表达式树. Lambda表达式的组成: 输入参数.Lambda运算符(=& ...

随机推荐

  1. nexus中央仓库中发布自己的jar包

    1.后台上传 通过nexus后台上传第三方包: http://blog.csdn.net/huchunlinnk/article/details/17789175 上面上传的只能上传release版本 ...

  2. 统一回复《怎么学JavaScript?》

    作者:小不了链接:https://zhuanlan.zhihu.com/p/23265155来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 鉴于时不时,有同学私信问我( ...

  3. nodejs express 框架解密2-如何创建一个app

    本文是基于express 3.4.6 的 1.在我们的app.js 文件里面有这么几行 http.createServer(app).listen(app.get('port'), function( ...

  4. MediaElement视频控制:播放、暂停、停止、后退、快进、跳转、音量

    /* =================================================  * Author:     Micro  * Date:       2016=03-25 ...

  5. java单例之enum实现方式

    传统的两私有一公开(私有构造方法.私有静态实例(懒实例化/直接实例化).公开的静态获取方法)涉及线程安全问题(即使有多重检查锁也可以通过反射破坏单例), 目前最为安全的实现单例的方法是通过内部静态en ...

  6. ecshop 加广告出现广告位的宽度值必须在1到1024之间

    打开 admin/ad_position.php这个文件,搜索1024,这里你会搜到两个地方 在236行左右 if ($ad_width > 1024 || $ad_width < 1) ...

  7. 【jquery】Validform,一款不错的 jquery 表单验证插件

    关于 Validform 这是一款很不错的 jquery 表单验证插件,它几乎能够满足任何验证需求,仅仅一行代码就能搞定整站的表单验证. $('form').Validform(); 为什么能如此方便 ...

  8. Android学习之ProgressBar

    ProgressBar用于向用户显示某个耗时操作完成的百分比,避免长时间执行某个耗时操作时让用户感觉程序失去了响应,从而提高用户界面的友好性. 请看下面的界面布局: <LinearLayout ...

  9. android studio出现Error:compileSdkVersion android-x requires compiling with JDK 7问题

    初装Android studio的童鞋可能或多或少会存在一些问题,比如出现Error:compileSdkVersion android-x requires compiling with JDK 7 ...

  10. 使用Struts+Hibernate开发学生信息管理系统

    1.项目组织结构 2.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app vers ...