Linq与扩展方法
使用数据集
/// <summary>
/// 库房信息类
/// </summary>
public class Kfxx
{
/// <summary>
/// 库房代码
/// </summary>
public string kfdm { get; set; }
/// <summary>
/// 库房名称
/// </summary>
public string kfmc { get; set; }
/// <summary>
/// 使用状态:0有效 1无效
/// </summary>
public int jlzt { get; set; }
}
/// <summary>
/// 帐类信息类
/// </summary>
public class Zlxx
{
/// <summary>
/// 库房代码
/// </summary>
public string kfdm { get; set; }
/// <summary>
/// 帐类代码
/// </summary>
public string zldm { get; set; }
/// <summary>
/// 帐类名称
/// </summary>
public string zlmc { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal je { get; set; }
}
/// <summary>
/// 统计期信息类
/// </summary>
public class Tjqxx
{
/// <summary>
/// 库房代码
/// </summary>
public string kfdm { get; set; }
/// <summary>
/// 帐类代码
/// </summary>
public string zldm { get; set; }
/// <summary>
/// 统计期
/// </summary>
public string ny { get; set; }
/// <summary>
/// 开始日期
/// </summary>
public DateTime ksrq { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public DateTime jsrq { get; set; }
/// <summary>
/// 记账标志 0未记账 1已记账
/// </summary>
public int jzbz { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal je { get; set; }
} /// <summary>
/// 数据定义
/// </summary>
public class DataSource
{
public static List<Kfxx> kfxx { get; private set; }
public static List<Kfxx> kfxx2 { get; private set; }
public static List<Zlxx> zlxx { get; private set; }
public static List<Tjqxx> tjqxx { get; private set; }
static DataSource()
{
kfxx = new List<Kfxx>
{
new Kfxx{kfdm="",kfmc="总务科",jlzt=},
new Kfxx{kfdm="",kfmc="设备科",jlzt=},
new Kfxx{kfdm="",kfmc="供应室",jlzt=},
new Kfxx{kfdm="",kfmc="总务科",jlzt=}
};
kfxx2 = new List<Kfxx>
{
new Kfxx{kfdm="",kfmc="Union库房",jlzt=}
};
zlxx = new List<Zlxx>
{
new Zlxx{kfdm="",zldm="",zlmc="医用材料",je=},
new Zlxx{kfdm="",zldm="",zlmc="一次性材料",je=},
new Zlxx{kfdm="",zldm="",zlmc="器械材料",je=},
new Zlxx{kfdm="",zldm="",zlmc="无统计期",je=}
};
tjqxx = new List<Tjqxx>
{
new Tjqxx{kfdm="",zldm="",ny="",ksrq=Convert.ToDateTime("2013-06-01 00:00:00"),jsrq=Convert.ToDateTime("2013-06-30 23:59:59"),jzbz=,je=},
new Tjqxx{kfdm="",zldm="",ny="",ksrq=Convert.ToDateTime("2013-07-01 00:00:00"),jsrq=Convert.ToDateTime("2013-07-31 23:59:59"),jzbz=,je=},
new Tjqxx{kfdm="",zldm="",ny="",ksrq=Convert.ToDateTime("2013-07-01 00:00:00"),jsrq=Convert.ToDateTime("2013-07-31 23:59:59"),jzbz=,je=},
new Tjqxx{kfdm="",zldm="",ny="",ksrq=Convert.ToDateTime("2013-07-01 00:00:00"),jsrq=Convert.ToDateTime("2013-07-31 23:59:59"),jzbz=,je=}
};
}
}
数据集
1.简单查询
var Query = from a in DataSource.kfxx
where a.kfdm==""
select new
{
a.kfdm,
a.kfmc
};
var Query = DataSource.kfxx.Select(p => new { p.kfdm, p.kfmc }).Where(p => p.kfdm == "");
2.distinct,first,last,skip,take,single
var Query = DataSource.kfxx.Select(p => new { p.kfdm, p.kfmc }).Distinct();
var Query = DataSource.kfxx.Select(p => new { p.kfdm, p.kfmc }).First();
var Query = DataSource.kfxx.Select(p => new { p.kfdm, p.kfmc }).Last();
var Query = DataSource.kfxx.Select(p => new { p.kfdm, p.kfmc }).Skip();
var Query = DataSource.kfxx.Select(p => new { p.kfdm, p.kfmc }).Take();
var Query = DataSource.kfxx.Where(p => p.kfdm == "").Select(p => new { p.kfdm, p.kfmc }).Single();
扩展方法
3.排序
var Query = from a in DataSource.kfxx
orderby a.kfdm descending, a.jlzt
select new
{
a.kfdm,
a.jlzt
};
var Query = DataSource.kfxx.OrderByDescending(p => p.kfdm).ThenBy(p => p.jlzt).Select(p => new { p.kfdm, p.jlzt });
4.Join
4.1 inner join
var Query = from a in DataSource.kfxx
from b in DataSource.zlxx
where a.jlzt == && a.kfdm==b.kfdm
orderby a.kfdm descending, a.jlzt
select new
{
a.kfdm,
a.kfmc,
b.zldm,
b.zlmc
};
var Query = (DataSource.zlxx.Join(DataSource.kfxx.Where(q => q.jlzt == ),
p => p.kfdm, q => q.kfdm,
(p, q) => new { q.kfdm, q.kfmc, p.zldm, p.zlmc, q.jlzt }))
.OrderByDescending(s => s.kfdm).ThenBy(s => s.jlzt)
.Select(t => new { t.kfdm, t.kfmc, t.zldm, t.zlmc });
4.2 left join
var Query = from a in DataSource.kfxx
from b in DataSource.zlxx
join c in DataSource.tjqxx on new { kfdm = b.kfdm, zldm = b.zldm } equals new { kfdm = c.kfdm, zldm = c.zldm }
into gg
from g in gg.DefaultIfEmpty()
where a.jlzt == && a.kfdm == b.kfdm && (g == null ? : g.jzbz) ==
//orderby a.kfdm descending, a.jlzt
select new
{
a.kfdm,
a.kfmc,
b.zldm,
b.zlmc,
ny = g == null ? "" : g.ny,
ksrq = g == null ? "" : g.ksrq.ToString(),
jsrq = g == null ? "" : g.jsrq.ToString()
};
var Query = (DataSource.zlxx.Join(DataSource.kfxx.Where(q => q.jlzt == ),
p => p.kfdm, q => q.kfdm,
(p, q) => new { q.kfdm, q.kfmc, p.zldm, p.zlmc }))
.GroupJoin(DataSource.tjqxx.Where(tjq=>tjq.jzbz==), zl => new { zl.kfdm, zl.zldm }, tjq => new { tjq.kfdm, tjq.zldm },
(zl, tjq) => new
{
zl = zl,
tjq = tjq
})
.SelectMany(group => group.tjq.DefaultIfEmpty(),
(group, tjq) => new
{
group.zl.kfdm,
group.zl.kfmc,
group.zl.zldm,
group.zl.zlmc,
ny = tjq == null ? "" : tjq.ny,
ksrq = tjq == null ? "" : tjq.ksrq.ToString(),
jsrq = tjq == null ? "" : tjq.jsrq.ToString()
}
);
5.聚合(count,sum,max,min,avg)
var Query = from a in DataSource.kfxx
join b in DataSource.zlxx on a.kfdm equals b.kfdm
into gg
where a.jlzt ==
from g in gg.DefaultIfEmpty()
group g by a.kfdm into gg1
where gg1.Sum(p => p == null ? : p.je)>
select new
{
kfdm = gg1.Key,
zlcount = gg1.Count(p => (p == null ? "" : p.zldm) != ""),
zje = gg1.Sum(p => p == null ? : p.je),
je_min = gg1.Min(p => p == null ? : p.je),
je_max = gg1.Max(p => p == null ? : p.je),
je_avg = gg1.Average(p => p == null ? : p.je)
};
var Query = DataSource.kfxx.Where(g => g.jlzt == ).GroupJoin(DataSource.zlxx, kf => kf.kfdm, zl => zl.kfdm,
(kf, zl) => new
{
kfdm = kf.kfdm,
zlcount = zl.DefaultIfEmpty().Count(p => (p == null ? "" : p.zldm) != ""),
zje = zl.DefaultIfEmpty().Sum(p => p == null ? : p.je),
je_min = zl.DefaultIfEmpty().Min(p => p == null ? : p.je),
je_max = zl.DefaultIfEmpty().Max(p => p == null ? : p.je),
je_avg = zl.DefaultIfEmpty().Average(p => p == null ? : p.je)
}).Where(g=>g.zje>);
6.其他
6.1 Union
var Query = DataSource.kfxx.Union(DataSource.kfxx2);
6.2 自定义聚合Aggregate
//自定义求平均为例
var Query = DataSource.kfxx.Where(g => g.jlzt == ).GroupJoin(DataSource.zlxx, kf => kf.kfdm, zl => zl.kfdm,
(kf, zl) => new
{
kfdm = kf.kfdm,
je_avg0 = zl.DefaultIfEmpty().Average(p => p == null ? : p.je),
je_avg1 = zl.DefaultIfEmpty().Aggregate(new Zlxx {je=},
(a, b) => { return new Zlxx { je = (a == null ? : a.je) + (b == null ? : b.je) }; },
c => new Zlxx { je = (c == null ? : c.je )/ (zl.DefaultIfEmpty().Count(p => (p == null ? "" : p.zldm) != "") == ? : (zl.DefaultIfEmpty().Count(p => (p == null ? "" : p.zldm) != ""))) }).je.ToString("C")
});
源代码(http://download.csdn.net/detail/lk13962517093/5692997)
小弟刚学,不正确之处请指点。
Linq与扩展方法的更多相关文章
- Linq之扩展方法
目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何 ...
- EF下lambda与linq查询&&扩展方法
1. linq查询数据 WebTestDBEntities db = new WebTestDBEntities(); 1.1 linq查询所有列数据 var userInfoList = from ...
- 21扩展IEnumerable<T>泛型接口自定义LINQ的扩展方法
LINQ方法实际上是对IEnumerable<TSource>的扩展,如图: 本篇自定义一个MyWhere方法,达到与Where相同的效果. 使用LINQ自带的Where方法 ...
- linq和扩展方法
c#的扩展方法 1.必须是在一个非嵌套.非泛型的静态类中的静态方法 2.至少一个参数,第一个参数附加this,不能有其他修饰符如out.ref 3.第一个参数不能是指针类型 上面例子是自定义的一个扩展 ...
- [转][C#]Linq 的扩展方法
public static class LinqEx { public static IEnumerable<TResult> LeftExcludingJoin<TSource, ...
- linq本质扩展方法+lambda表达式
string[] names = { "aa","bb","cc","dd"}; /* IEnumerable<s ...
- 从扩展方法到匿名方法再到LINQ
1.首先我们应该知道什么是扩展方法: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
- ASP.NET MVC学前篇之扩展方法、链式编程
ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...
- .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)
1.自动属性 Auto-Implemented Properties 2.隐式类型 var var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...
随机推荐
- 【測试工具】一个将Unix时间转换为通用时间的工具
一个将Unix时间转换为通用时间的工具 演示效果: 点击转换之后变为: 源码: function calctime2(){ var time = window.document.getElementB ...
- service 和 Controller 差别
service 层能够看做是还有一个 DAO 层,仅仅是在里面封装了还有一些逻辑. 而 Controller 和 service 差别就大了.Controller 要处理请求映射, service ...
- Java8 读写锁的改进:StampedLock(笔记)
StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之间依然是冲突的,读 ...
- Stack Exchange 的架构
近日,Stack Exchange系统管理员blog上发布了一篇关于Stack Exchange的架构一瞥,其包括了Stack Overflow, Server Fault 和 Super User的 ...
- 查看tomcat启动文件都干点啥---catalina.bat
在上一次查看tomcat启动文件都干点啥一文中,我们总结出,startup.bat文件的作用就是找到catalina.bat文件,然后把参数传递给它,在startup.bat中,调用catalina. ...
- win10 为了对电脑进行保护,已经阻止此应用 解决方法
win10 为了对电脑进行保护,已经阻止此应用 解决方法 正确方法: ."win+x"进入控制面板,选择安全性与维护,在左侧更改windows smartscreen筛选器 ...
- VBA【遍历每个工作表并将工作表表名赋予B2单元格】
方法一: 存在缺陷:选中所有单元格,批量生成公式时候,每次需要点击进入工作表点击单元格--进入编辑状态,然后公式才会生效 使用公式如下: =,) 附件下载地址:点击下载 方法二: 使用宏编程进行复制 ...
- (二)Linux——Linux常用指令
1. 文件目录操作命令 ls 显示文件和目录列表 -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 mkdir 创建目录 -p 父目录不存在情况下先生成父目录 cd 切换目录 ...
- VS代码注释插件GhostDoc
http://community.submain.com/blogs/tutorials/archive/2013/03/28/how-to-access-ghostdoc-pro-features. ...
- 打包Cocos2d-xproject为PC项目
<1>第一步,得到总体的大.exe 1.复制cocos2d-x-2.2文件下的Release.win32文件侠到桌面. 2.将项目下的Resources里的资源拷贝到Release.win ...