linq的简单查询 和 组合查询
以Car表和Brand表为例,其中Car表的Brand是Brand表的Brandcode。
(1)建立两表的linq(一定要做好主外键关系,),创建之后不用修改,如要添加,另建文件。
(2)Car表的属性扩展(注意partial)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; /// <summary>
/// Car 的摘要说明
/// </summary>
public partial class Car
{ public string BrandStr
{ get {
return this.Brand1.Brand_Name; }
} }
(3)Car表和Brand表的封装方法(模糊查,开头,结尾,个数,最大值,最小值,平均值,求和,升序,降序,分页,组合查询都在CarData里面)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; /// <summary>
/// BrandData 的摘要说明
/// </summary>
public class BrandData
{
mydbDataContext cnn = null;
public BrandData()
{
cnn = new mydbDataContext();
} public List<Brand> quan()
{
return cnn.Brand.ToList(); } }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; /// <summary>
/// CarData 的摘要说明
/// </summary>
public class CarData
{
mydbDataContext cnn = null;
public CarData()
{
cnn = new mydbDataContext();
}
/// <summary>
/// 查询全部信息
/// </summary>
/// <returns>泛型集合</returns>
public List<Car> quan()
{
return cnn.Car.ToList();
}
/// <summary>
/// 根据名字模糊查询
/// </summary>
/// <param name="name">名称中的某一段字</param>
/// <returns>泛型集合</returns>
public List<Car> selectname(string name)
{
return cnn.Car.Where(r => r.Name.Contains(name)).ToList();
}
/// <summary>
/// 查询name以n开头的所有数据
/// </summary>
/// <param name="n">name以n开头的字</param>
/// <returns></returns>
public List<Car> selectstartname(string n)
{ return cnn.Car.Where(r => r.Name.StartsWith(n)).ToList();//r.name可以换成别的列
}
/// <summary>
/// 查询name以n结束的所有数据
/// </summary>
/// <param name="n">name以n结束的字</param>
/// <returns></returns>
public List<Car> selectendname(string n)
{ return cnn.Car.Where(r => r.Name.EndsWith(n)).ToList();//r.name可以换成别的列
}
/// <summary>
/// 查询价格最高的那个数
/// </summary>
/// <returns>最大数</returns>
public decimal? selectpricemax()
{
return cnn.Car.Max(r => r.Price);
}
/// <summary>
/// 查询价格最小的那个数
/// </summary>
/// <returns>最小数</returns>
public decimal? selectpricemin()
{
return cnn.Car.Min(r => r.Price);
}
/// <summary>
/// 查询价格的平均数
/// </summary>
/// <returns>平均数</returns>
public decimal? selectpriceavg()
{
return cnn.Car.Average(r=>r.Price);
}
/// <summary>
/// 查询价格的总数
/// </summary>
/// <returns>价格总数</returns>
public decimal? selectpricesum()
{
return cnn.Car.Sum(r=>r.Price);
}
/// <summary>
/// 按照价格升序进行排列的集合
/// </summary>
/// <returns>集合</returns>
public List<Car> order()
{
return cnn.Car.OrderBy(r=>r.Price).ToList();//按照价格升序
} /// <summary>
/// 按照价格降序进行排列的集合
/// </summary>
/// <returns>集合</returns>
public List<Car> descorder()
{
return cnn.Car.OrderByDescending(r => r.Price).ToList(); }
/// <summary>
/// 分页显示
/// </summary>
/// <param name="pagecount">每一页的页数</param>
/// <param name="num">第几页</param>
/// <returns>集合</returns>
public List<Car> fenye(int pagecount, int num)
{
return cnn.Car.Skip(pagecount * (num - )).Take(pagecount).ToList();//cnn.Car表示所有的数据
}
/// <summary>
/// 组合分页查询
/// </summary>
/// <param name="clist">所需要分页的集合</param>
/// <param name="pagecount">每一页的页数</param>
/// <param name="num">第几页</param>
/// <returns></returns>
public List<Car> zufen(List<Car> clist, int pagecount, int num)
{
return clist.Skip(pagecount * (num - )).Take(pagecount).ToList();//clist表示所需要分页的集合 }
}
(4)页面设计
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
名称<asp:TextBox ID="name_text" runat="server"></asp:TextBox>
品牌<asp:DropDownList ID="brand_dd" runat="server"></asp:DropDownList>
价格<asp:DropDownList ID="pri_dd" runat="server">
<asp:ListItem>>=</asp:ListItem>
<asp:ListItem><=</asp:ListItem>
</asp:DropDownList><asp:TextBox ID="price_text" runat="server"></asp:TextBox>
<asp:Button ID="enter_btn" runat="server" Text="确定" />
<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table style="width:100%; background-color:blue;">
<tr>
<td>序号</td>
<td>名称</td>
<td>品牌</td>
<td>时间</td>
<td>油耗</td>
<td>马力</td>
<td>价格</td>
<td>照片</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:gray" class="a">
<td><%#Container.ItemIndex+ %></td>
<td><%#Eval("Name") %></td>
<td><%#Eval("BrandStr") %></td>
<td><%#Eval("Time","{0:yyyy年MM月dd日}") %></td>
<td><%#Eval("Oil") %></td>
<td><%#Eval("Powers") %></td>
<td><%#Eval("Price") %></td>
<td><%#Eval("Pic") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
当前第【<asp:Label ID="numLabel" runat="server" Text=""></asp:Label>】页,共【<asp:Label ID="sumLabel" runat="server" Text=""></asp:Label>】页
<asp:LinkButton ID="previewButton" runat="server">上一页</asp:LinkButton>
<asp:LinkButton ID="nextButton" runat="server">下一页</asp:LinkButton>
跳转到第<asp:DropDownList ID="page_dd" runat="server" AutoPostBack="true"></asp:DropDownList>页
</form>
</body>
</html>
<script>
var all = new Array();
all =document.getElementsByClassName("a"); for (var i = ; i < all.length; i++)
{
var old;
all[i].onmouseover = function ()
{
old = this.style.backgroundColor;
this.style.backgroundColor = "yellow";
}
all[i].onmouseout = function () { this.style.backgroundColor = old;
}
} </script>
(5)C#端代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page
{
int pagecount = ;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<Car> list = new CarData().quan();
Repeater1.DataSource = new CarData().fenye(pagecount, ); ;
Repeater1.DataBind(); List<Brand> blist = new BrandData().quan();
brand_dd.Items.Add(new ListItem("全部","null"));
for(int i=;i<blist.Count;i++)
{
brand_dd.Items.Add(new ListItem(blist[i].Brand_Name,blist[i].Brand_Code));
} numLabel.Text = "";
sumLabel.Text = pagemax(list, pagecount).ToString();
for (int i = ; i <= int.Parse(sumLabel.Text); i++)
{
page_dd.Items.Add(new ListItem(i.ToString(),i.ToString()));
}
}
enter_btn.Click += enter_btn_Click;//查询按钮点击事件
nextButton.Click += nextButton_Click;//下一页的点击事件
previewButton.Click += previewButton_Click;//上一页的事件
page_dd.SelectedIndexChanged += page_dd_SelectedIndexChanged;//跳转到第几页事件
} void page_dd_SelectedIndexChanged(object sender, EventArgs e)//跳转到第几页事件
{
int c = int.Parse(page_dd.SelectedValue);
using (mydbDataContext cnn = new mydbDataContext())//运用多个集合的交集方法
{
int aa = int.Parse(page_dd.SelectedValue);
numLabel.Text = aa.ToString();//第几页中的页数
var all = cnn.Car.AsEnumerable();//相当于拼接sql语句
if (name_text.Text.Trim().Length > )
{
var nlist = cnn.Car.Where(r => r.Name.Contains(name_text.Text.Trim()));
all = all.Intersect(nlist);//取all集合和nlist集合的公共部分
}
if (brand_dd.SelectedValue == "null")
{ }
else
{ var blist = cnn.Car.Where(r => r.Brand == brand_dd.SelectedValue);
all = all.Intersect(blist);
}
if (price_text.Text.Trim().Length > )
{ if (pri_dd.SelectedIndex == )
{ var plist = cnn.Car.Where(r => r.Price >= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
else
{
var plist = cnn.Car.Where(r => r.Price <= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
}
Repeater1.DataSource = new CarData().zufen(all.ToList(), pagecount,aa);
Repeater1.DataBind(); } } void previewButton_Click(object sender, EventArgs e)//上一页的事件
{
using (mydbDataContext cnn = new mydbDataContext())//运用多个集合的交集方法
{
int a = int.Parse(numLabel.Text) -;//哪一页的页数
if (a <= )//判断有没有到最后一页
{
return;
}
numLabel.Text = a.ToString();//第几页中的页数
var all = cnn.Car.AsEnumerable();//相当于拼接sql语句
if (name_text.Text.Trim().Length > )
{
var nlist = cnn.Car.Where(r => r.Name.Contains(name_text.Text.Trim()));
all = all.Intersect(nlist);//取all集合和nlist集合的公共部分
}
if (brand_dd.SelectedValue == "null")
{ }
else
{ var blist = cnn.Car.Where(r => r.Brand == brand_dd.SelectedValue);
all = all.Intersect(blist);
}
if (price_text.Text.Trim().Length > )
{ if (pri_dd.SelectedIndex == )
{ var plist = cnn.Car.Where(r => r.Price >= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
else
{
var plist = cnn.Car.Where(r => r.Price <= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
}
Repeater1.DataSource = new CarData().zufen(all.ToList(), pagecount, a);
Repeater1.DataBind();
}
} void nextButton_Click(object sender, EventArgs e)//下一页的点击事件
{
using (mydbDataContext cnn = new mydbDataContext())//运用多个集合的交集方法
{
int a = int.Parse(numLabel.Text) + ;//哪一页的页数
if (a > int.Parse(sumLabel.Text))//判断有没有到最后一页
{
return;
}
numLabel.Text = a.ToString();//第几页中的页数
var all = cnn.Car.AsEnumerable();//相当于拼接sql语句
if (name_text.Text.Trim().Length > )
{
var nlist = cnn.Car.Where(r => r.Name.Contains(name_text.Text.Trim()));
all = all.Intersect(nlist);//取all集合和nlist集合的公共部分
}
if (brand_dd.SelectedValue == "null")
{ }
else
{ var blist = cnn.Car.Where(r => r.Brand == brand_dd.SelectedValue);
all = all.Intersect(blist);
}
if (price_text.Text.Trim().Length > )
{ if (pri_dd.SelectedIndex == )
{ var plist = cnn.Car.Where(r => r.Price >= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
else
{
var plist = cnn.Car.Where(r => r.Price <= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
}
Repeater1.DataSource = new CarData().zufen(all.ToList(),pagecount,a);
Repeater1.DataBind(); } } void enter_btn_Click(object sender, EventArgs e)//查询按钮点击事件
{
using (mydbDataContext cnn = new mydbDataContext())//运用多个集合的交集方法
{
page_dd.Items.Clear();
var all = cnn.Car.AsEnumerable();//相当于拼接sql语句
if (name_text.Text.Trim().Length>)
{
var nlist = cnn.Car.Where(r => r.Name.Contains(name_text.Text.Trim()));
all = all.Intersect(nlist);
}
if (brand_dd.SelectedValue == "null")
{ }
else
{ var blist = cnn.Car.Where(r => r.Brand == brand_dd.SelectedValue);
all = all.Intersect(blist);
}
if (price_text.Text.Trim().Length > )
{ if (pri_dd.SelectedIndex == )
{ var plist = cnn.Car.Where(r => r.Price >= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
else
{
var plist = cnn.Car.Where(r => r.Price <= decimal.Parse(price_text.Text.Trim()));
all = all.Intersect(plist);
}
} Repeater1.DataSource = new CarData().zufen(all.ToList(), pagecount, );
Repeater1.DataBind();
sumLabel.Text = pagemax(all.ToList(), pagecount).ToString();
numLabel.Text = "";
for (int i = ; i <= pagemax(all.ToList(), pagecount); i++)
{
page_dd.Items.Add(new ListItem(i.ToString(),i.ToString()));
}
} //if (name_text.Text.Trim() == "" && brand_dd.SelectedValue=="null" && price_text.Text.Trim() == "")//如果没有条件就查询全部
//{
// Repeater1.DataSource = new CarData().quan();
// Repeater1.DataBind();
// return;
//} //Repeater1.DataSource = new CarData().selectname(name_text.Text.Trim());//根据name中的XXX模糊查询
// Repeater1.DataSource = new CarData().selectstartname(name_text.Text.Trim());//name以XXX开头来查询
//Repeater1.DataSource = new CarData().selectendname(name_text.Text.Trim());//name以XXX结束来查询
//Label1.Text = new CarData().selectendname(name_text.Text.Trim()).Count.ToString();//获取符合条件的个数。其实就是根据模糊查询查出来的集合的子集个数。
//Repeater1.DataSource = new CarData().descorder();//按照价格降序进行排列
//Label1.Text = new CarData().selectpricemax().ToString();//查询价格最大的那个数
//Label1.Text = new CarData().selectpriceavg().ToString();//查询价格的平均数
//Label1.Text = new CarData().selectpricesum().ToString();//查询价格的总数
//Repeater1.DataBind(); }
public int pagemax(List<Car> clist,int pagecount)//求最大页数
{
int a = clist.Count;
return Convert.ToInt32(Math.Ceiling(a / (pagecount * 1.0))); } }
完!!
linq的简单查询 和 组合查询的更多相关文章
- LinQ高级查询、组合查询、IQueryable集合类型
LinQ高级查询: 1.模糊查询(包含) Repeater1.DataSource = con.car.Where(r =>r.name.Contains(s)).ToList(); 2.开头 ...
- LinQ各种方式查询、组合查询、IQueryable集合类型
1.模糊查询(包含) Repeater1.DataSource = con.car.Where(r =>r.name.Contains(s)).ToList(); 2.开头查询 Repeater ...
- SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...
- SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
拖了一个星期,终于开始写第三篇了.走起! 聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均 ...
- MySQL全面瓦解11:子查询和组合查询
概述 子查询是SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询. 先做一下数据准备,这边建立三张表:班级.学生. ...
- MySQL联结查询和组合查询
联结查询 1.关系表 主键:一列或一组列,能够唯一区分表中的每一行,用来表示一个特定的行 外键:为某个表中的一列,包含另一个表的主键,定义量表的关系. 2.创建联结 规定要连接的表和他们如何关联即可 ...
- mysql 子查询 联结 组合查询
子查询 SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='T ...
- SolrJ查询条件组合查询实现——(十六)
带查询条件的实现原理: 查询按钮被包在一个大表单,表单还有三个隐藏域,一个商品筛选,一个 价格,一个排序,每次点击查询时候清空三个隐藏域,就带着一个大条件去查询;点击下面的筛选条件时,给隐藏域的筛选条 ...
- 2019-1-11 SQL语句汇总——聚合函数、分组、子查询及组合查询
随机推荐
- 给三个int,判断是否可构成三角形算法
哎,今天跟同事讨论算法,有一个女生给我出了这样一个题目,bool Test(int a,int b,int c)感觉很简单,实际呢?自己考虑的不够全面.在得到了提示之后呢,也还是找不到很好的解决方案. ...
- [原创]Scala学习:for,function,lazy
1.for循环是一个循环控制结构,可以有效地编写需要执行的特定次数的循环.Scalar的循环说明如下的各种形式: 1)Scala中for循环最简单的语法是: for( var x <- Rang ...
- java ajax传值 中文乱码
String remark = new String(this.getRequest().getParameter("remark").getBytes("iso885 ...
- php setcookie 讲解
1.setcookie 中 $value 值不能为数组 e.g a.$arr = array('hh','bb');setcookie('username',$arr);这种不会生效的 如果确实要放数 ...
- 用jQuery创建HTML中不存在的标签元素碰到的问题
如果你自定义了一个标签,比如<aaa></aaa> 用jQuery的写法,比如var custom_element = $('<aaa class="ee&qu ...
- 在CentOS 6 32/64 上安装 PPTP 方式 VPN 服务
网上有很多步骤, 讲了很多步骤,废话, 其实不如直接看代码, 而且也能直接运行,快速安装: rm -f /etc/pptpd.conf rm -f /etc/ppp arch=`uname -m` # ...
- SQL SERVER 2008 中三种分页方法与总结
建立表: CREATE TABLE [TestTable] ( , ) NOT NULL , ) COLLATE Chinese_PRC_CI_AS NULL , ) COLLATE Chinese_ ...
- iptables的四表五链
iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables.真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构. iptables包含4个表, ...
- 将linux下的rm命令改造成移动文件至回收站【转】
转自:http://blog.csdn.net/a3470194/article/details/16863803 [-] 将linux下的rm命令改造成移动文件至回收站 将AIX下的rm命令改造成移 ...
- oracle 数据泵 详解
导出数据 1)按用户导 expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dir logfile=expdp.log ...