本节我们主要介绍一下如何创建查询集合类型,关系数据库类型,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对四种对象的查询方法,后面我们会有更详细的讲解。