您的位置:首页 > 其它

Linq强大的查询功能,以及DataSet中多表之间交叉查询,字段过滤,筛选等

2016-12-29 00:00 204 查看
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LinqDemo.aspx.cs" Inherits="LinqDemo" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Linq强大查询功能</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
<asp:GridView ID="GridView2" runat="server">
</asp:GridView>
</div>
</form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class LinqDemo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Linq筛选示例
int[] strocs = { 75, 80, 98, 78, 86, 65, 50, 90 };
var highScoresQuery = (from stroc in strocs
orderby stroc ascending
where stroc >= 90
select stroc).Max();
Response.Write(highScoresQuery + "<br>");

/*
从中可以看出学生“李四”没有成绩,所以不在查询query1的结果中。
Query1-所有学生成绩:
姓名:张三, 数学:80, 语文:75, 英语:78
姓名:王霞, 数学:88, 语文:80, 英语:60
姓名:赵敏, 数学:75, 语文:90, 英语:80
姓名:吴安, 数学:59, 语文:80, 英语:75
*/
QueryStuScores();

/*
Query2-没有成绩的学生:姓名:李四, 性别:男, 年龄:19
Query3-没有成绩的学生:姓名:李四, 性别:男, 年龄:19
*/
QueryNoneScoreStu();
/*
查询query1年龄大于20且具有成绩的学生 显示:
学生列表:
姓名:王霞, 性别:女, 年龄:21
姓名:赵敏, 性别:女, 年龄:22
*
*/
UseCopyToDTSimple();

CreateDataVeiw();
}

protected  DataSet BuildDataSet()
{
//创建Students数据集
DataSet ds = new DataSet("Students");
//创建Students数据表dtStu,并添加到数据集ds中
//Students数据表包含学生信息
DataTable dtStu = new DataTable("Students");
ds.Tables.Add(dtStu);
//添加学生信息记录的列信息,包括4列数据:
//姓名:Name,string类型
//性别:XingBie,string类型
//年龄:Age,int类型
//成绩编号:ScoreID,int类型
dtStu.Columns.AddRange(new DataColumn[]{
new DataColumn("Name", Type.GetType("System.String")),
new DataColumn("XingBie", Type.GetType("System.String")),
new DataColumn("Age", Type.GetType("System.Int32")),
new DataColumn("ScoreID", Type.GetType("System.Int32")),
});
//添加5个学生信息到数据表dtStu中,分别包括姓名、性别、年龄和成绩编号
dtStu.Rows.Add("张三", "男", 20, 1);
dtStu.Rows.Add("李四", "男", 19, 2);
dtStu.Rows.Add("王霞", "女", 21, 3);
dtStu.Rows.Add("赵敏", "女", 22, 4);
dtStu.Rows.Add("吴安", "男", 18, 5);

//创建Scores数据表,并添加到数据集
//Scores数据表包含学生成绩记录
DataTable dtScore = new DataTable("Scores");
ds.Tables.Add(dtScore);
//添加成绩记录表的列(字段)信息,包含4个字段:
//成绩编号:ScoreID,int类型,与Students表的ScoreID字段对应
//数学成绩:Math,int类型
//语文成绩:Chinese,int类型
//英语成绩:English,int类型
dtScore.Columns.AddRange(new DataColumn[]{
new DataColumn("ScoreID", Type.GetType("System.Int32")),
new DataColumn("Math", Type.GetType("System.Int32")),
new DataColumn("Chinese", Type.GetType("System.Int32")),
new DataColumn("English", Type.GetType("System.Int32")),
});
//添加学生成绩记录,分别包括成绩编号、数学成绩、语文成绩、英语成绩
dtScore.Rows.Add(1, 80, 75, 78);
dtScore.Rows.Add(3, 88, 80, 60);
dtScore.Rows.Add(4, 75, 90, 80);
dtScore.Rows.Add(5, 59, 80, 75);
//返回数据集
return ds;
}

protected  void QueryStuScores()
{
DataSet ds = BuildDataSet(); //获取数据集ds
DataTable dtStu = ds.Tables["Students"]; //从数据集ds中获取Students表dtStu
DataTable dtScore = ds.Tables["Scores"]; //从数据集ds中获取Scores表dtScore
var query1 =   //查询query1查询所有学生的成绩
from stu in dtStu.AsEnumerable() //从Students表和Scores表中查询
from score in dtScore.AsEnumerable()
where stu.Field<int>("ScoreID") == score.Field<int>("ScoreID") //成绩编号(ScoreID)相等
select new   //匿名类型为查询结果元素类型,包括四个成员
{
Name = stu.Field<string>("Name"),
MathS = score.Field<int>("Math"),
Chinese = score.Field<int>("Chinese"),
English = score.Field<int>("English")
};
HttpContext.Current.Response.Write("Query1-所有学生成绩:<br/>");
foreach (var item in query1) //打印查询query1的结果
{
string ResTxt = string.Format("姓名:{0}, 数学:{1}, 语文:{2}, 英语:{3}",
item.Name, item.MathS, item.Chinese, item.English);
HttpContext.Current.Response.Write(ResTxt + "<br/>");
}
}

protected  void QueryNoneScoreStu()
{
DataSet ds = BuildDataSet(); //获取数据集ds
DataTable dtStu = ds.Tables["Students"]; //从数据集ds中获取Students表dtStu
DataTable dtScore = ds.Tables["Scores"]; //从数据集ds中获取Scores表dtScore

var scoreIDs = //查询scoreIDs查询所有有成绩的学生的成绩编号
from score in dtScore.AsEnumerable()
select score.Field<int>("ScoreID");
var query2 =  //查询query2查询所有成绩号不在查询scoreIDs中学生信息
from stu in dtStu.AsEnumerable()
where !scoreIDs.Contains<int>(stu.Field<int>("ScoreID"))
select stu;
HttpContext.Current.Response.Write("Query2-没有成绩的学生:");
foreach (var item in query2) //打印查询query2的结果
{
string ResTxt = string.Format("姓名:{0}, 性别:{1}, 年龄:{2}",
item.Field<string>("Name"), item.Field<string>("XingBie"), item.Field<int>("Age"));
HttpContext.Current.Response.Write(ResTxt + "<br/>");
}

var scrStu = //查询scrStu查询所有具有成绩信息的学生
from stu in dtStu.AsEnumerable()
from score in dtScore.AsEnumerable()
where stu.Field<int>("ScoreID") == score.Field<int>("ScoreID")
select stu;
//查询query3是从所有学生记录中剔除具有成绩的学生。
var query3 = dtStu.AsEnumerable().Except(scrStu);
HttpContext.Current.Response.Write("Query3-没有成绩的学生:");
foreach (var item in query3) //打印查询query3的结果
{
string ResTxt = string.Format("姓名:{0}, 性别:{1}, 年龄:{2}",
item.Field<string>("Name"), item.Field<string>("XingBie"), item.Field<int>("Age"));
HttpContext.Current.Response.Write(ResTxt + "<br/>");
}
}

protected  void UseCopyToDTSimple()
{
DataSet ds = BuildDataSet(); //获取数据集ds
DataTable dtStu = ds.Tables["Students"]; //从数据集ds中获取Students表dtStu
DataTable dtScore = ds.Tables["Scores"]; //从数据集ds中获取Scores表dtScore
var query1 = //查询query1年龄大于20且具有成绩的学生
from stu in dtStu.AsEnumerable()
from score in dtScore.AsEnumerable()
where stu.Field<int>("ScoreID") == score.Field<int>("ScoreID")
where (int)stu["Age"] > 20
select stu;
//通过CopyToDataTable()方法创建新的副本
//然后打印该副本的信息 通常用于界面绑定
DataTable newDt = query1.CopyToDataTable<DataRow>();
HttpContext.Current.Response.Write("学生列表:<br/>");
foreach (var item in newDt.AsEnumerable())     //打印该副本的信息
{
string ResTxt = string.Format("姓名:{0}, 性别:{1}, 年龄:{2}",
item["Name"], item["XingBie"], item["Age"]);
HttpContext.Current.Response.Write(ResTxt + "<br/>");
}
}

protected  void CreateDataVeiw()
{
DataSet ds = BuildDataSet(); //获取数据集ds
DataTable dt = ds.Tables["Students"]; //从数据集ds获取Students表dt
//用DataTable.AsDataView()方法从数据表dt创建DataView对象dvDt
DataView dvDt = dt.AsDataView();
//query1用LINQ查询创建DataView对象dvDt,查询它所有的元素
EnumerableRowCollection<DataRow> query1 =
from stu in dt.AsEnumerable()
select stu;
DataView dvNml = query1.AsDataView(); //获取查询query1产生的DataView
//query2用LINQ查询创建具有过滤信息的DataView,查询所有姓“张”的学生
EnumerableRowCollection<DataRow> query2 =
from stu in dt.AsEnumerable()
where stu.Field<string>("Name").StartsWith("张")
select stu;
DataView dvFilter = query2.AsDataView(); //获取查询query2产生的DataView
//query3用LINQ查询创建具有排序信息的DataView,将学生按照从小到大的顺序排序
EnumerableRowCollection<DataRow> query3 =
from stu in dt.AsEnumerable()
orderby stu.Field<int>("Age")
select stu;
DataView dvSort = query3.AsDataView(); //获取查询query3产生的DataView
//绑定显示
GridView1.DataSource = dvFilter;
GridView1.DataBind();
GridView2.DataSource = dvSort;
GridView2.DataBind();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: