博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq GroupJoin(一)
阅读量:4041 次
发布时间:2019-05-24

本文共 3126 字,大约阅读时间需要 10 分钟。

我们知道Linq group join 实现 SQL left join .隨意兩個測試用表:

1. 員工工資表   EmpId varchar(50), //員工 ID DeptId int,//部門ID Salary decimal(18,2) //工資2. 部門表DeptId int, //部門DeptName nvarchar(100)//部門名稱  ///     /// Linq GroupJoin  類似于  Sql Left outer join     ///             private void btnGroupJoin_Click(object sender, EventArgs e)    {
DataSet ds = sqlherpler.GetData("SELECT *FROM DepartMent;SELECT * FROM Employee1", null); DataTable dtEmployee = ds.Tables[1];//員工表 DataTable dtDept = ds.Tables[0]; //部門名稱表 // Linq 表達式形式。 連接得到 部門名稱 var query1 = from item1 in dtEmployee.AsEnumerable() // 員工表作為左表 join item2 in dtDept.AsEnumerable()// 部門表作為右表 on item1.Field
("deptId") equals item2.Field
("deptId") into g //部門ID相等 select new {
EmpId = item1.Field
("empId"), DeptName = g.Select (o=>o.Field
("deptName")).FirstOrDefault() ?? "Unknow DepartMent",// g.Any() ? g.First().Field
("deptName") : "Unknow DepartMent", //得到 部門名稱 Salary = item1.Field
("salary") }; dgv1.DataSource = query1.ToList(); //Lambda 函數形式。連接得到每個部門的員工人數,平均工資 var query2 = dtDept.AsEnumerable().GroupJoin(dtEmployee.AsEnumerable(), item1 => item1.Field
("deptId"), item2 => item2.Field
("deptId"), (item1, item2) => new { DeptId = item1.Field
("deptId"), DeptName = item1.Field
("deptName"), EmployeeNum = item2.Count() , //部門員工人數 SalaryAgv = item2.Any() ? item2.Average(o=>o.Field
("salary")).ToString ("0.00") : "0.00" //部門員工平均工資 }) ; dgv2.DataSource = query2.ToList(); }

在这里插入图片描述

另,如果是多个字段连接:例

var queryNotExistInLoc = from d in dtDownLoad.AsEnumerable()                                     join l in dtLoc.AsEnumerable()                                     on new {
k1 = Convert.ToString(d["employmentCode"]), k2 = DateTime.Parse(Convert.ToString(d["time"])) } equals new {
k1 = Convert.ToString(l["employmentCode"]), k2 = DateTime.Parse(Convert.ToString(l["ftime"])) } into ljoin select new {
d, itemCardType = Convert.ToString (ljoin.Select(o => o["cardType"]).FirstOrDefault() ?? "") };或 var query1 = dtDownLoad.AsEnumerable().GroupJoin(dtLoc.AsEnumerable(), item1 => new {
k1 = Convert.ToString(item1["employmentCode"]), k2 = DateTime.Parse(Convert.ToString(item1["time"])) }, item2 => new {
k1 = Convert.ToString(item2["employmentCode"]), k2 = DateTime.Parse(Convert.ToString(item2["ftime"])) }, (item1, item2) => new {
item1, itemCardType = Convert.ToString(item2.Select(o => o["cardType"]).FirstOrDefault() ?? "") }); query1.ToList().ForEach(o => Console.WriteLine(o.itemCardType) );

转载地址:http://simdi.baihongyu.com/

你可能感兴趣的文章
gstreamer插件之 videotestsrc
查看>>
linux 驱动开发 头文件
查看>>
/etc/resolv.conf
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
linux sfdisk partition
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>