使用数据集

 /// <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与扩展方法的更多相关文章

  1. Linq之扩展方法

    目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何 ...

  2. EF下lambda与linq查询&&扩展方法

    1. linq查询数据 WebTestDBEntities db = new WebTestDBEntities(); 1.1 linq查询所有列数据 var userInfoList = from ...

  3. 21扩展IEnumerable<T>泛型接口自定义LINQ的扩展方法

    LINQ方法实际上是对IEnumerable<TSource>的扩展,如图:   本篇自定义一个MyWhere方法,达到与Where相同的效果.     使用LINQ自带的Where方法 ...

  4. linq和扩展方法

    c#的扩展方法 1.必须是在一个非嵌套.非泛型的静态类中的静态方法 2.至少一个参数,第一个参数附加this,不能有其他修饰符如out.ref 3.第一个参数不能是指针类型 上面例子是自定义的一个扩展 ...

  5. [转][C#]Linq 的扩展方法

    public static class LinqEx { public static IEnumerable<TResult> LeftExcludingJoin<TSource, ...

  6. linq本质扩展方法+lambda表达式

    string[] names = { "aa","bb","cc","dd"}; /* IEnumerable<s ...

  7. 从扩展方法到匿名方法再到LINQ

    1.首先我们应该知道什么是扩展方法: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

  8. ASP.NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

  9. .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var  var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...

随机推荐

  1. TestNG+Maven+IDEA环境搭建

    TestNG+Maven+IDEA环境搭建 前言: 主要进行TestNG测试环境的搭建 所需环境: 1.IDEA UItimate 2.JDK 3.Maven 一.创建工程 File –>new ...

  2. 手机号码月消费档次API

    手机号码月消费档次API,返回手机号的每月消费水平,身份证姓名不做一致性校验 文档:https://www.juhe.cn/docs/api/id/261 接口地址:http://v.juhe.cn/ ...

  3. OpenERP7.0 忘记admin管理员密码解决办法

    操作环境:linux Ubuntu12.10  OpenERP7.0 以下操作,请注意大小写 切换用户 root@ubuntu:~# su - postgres 查看数据库 postgres@ubun ...

  4. 【Python】help与dir的用法

    当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表.当没有为其提供参数时, 它返回当前模块中定义的名字的列表. 如果您需要快速获取任何的Python函数或语句的信息,那么您可以使用 ...

  5. Java之旅(2)—反射

    1.     概念 反射就是将java类中的各种成分映射成对应的java类.之前我们已经讲过了Class类,也明确了一个java类中用一个Class类的对象来表示,一个类中的组成部分有:成员变量,方法 ...

  6. LoadRunner+Java接口性能测试

    想必各位小伙伴们会对LR还可以调用java感到好奇,之前我也这么一直认为LR只支持C语言.其实LR脚本支持的语言有:C.Java.Visual Basic.VbScript.JavaScript,只不 ...

  7. 利用pandas进行数据分析之ndarray结构

    Numpy的重要特点就是其N维数组对象, 1.ndarray每个元素是相同的,每个数组都有一个两个对象: .shape:用于表示维度大小的元组 .dtype:用户表示数组类型的对象 2.创建数组 ar ...

  8. mysql添加修改字段

    ALTER TABLE `uc_organization` ADD COLUMN `agent_id` VARCHAR(50) NOT NULL DEFAULT 0 COMMENT 'sqlserve ...

  9. node-webkit中使用sqlite3

    sqlite3的官方文档提到:nodejs和node-webkit的ABI不同,所以默认的安装方式: npm install sqlite3 安装的sqlite3是无法使用的,需要重新编译. 编译方法 ...

  10. JavaScript在IE浏览器和Firefox浏览器中的差异总结

    JavaScript在IE浏览器和Firefox浏览器中存在一些差异,以下对这些差异部分进行了总结,以及解决方案: 1.HTML对象的 id 作为对象名的问题 IE:HTML 对象的 ID 可以作为 ...