两个不同的数据源通过某个字段或者某些字段,想连接起来,之前的做法就是遍历两个数据源,但是C#推出的linq可以进行join拼接。
官方文档链接:https://learn.microsoft.com/zh-cn/dotnet/csharp/linq/perform-grouped-joins
下面简单介绍两种写法:
//左连接
var A = dtImportData.AsEnumerable().GroupJoin(orderList,
dr => new { a = dr["标题"].ToString() },
it => new { a = it.code },
(dr, it) => new { dr = dr, it = it }
).SelectMany(a => a.it.Select(t => new { dr = a.dr, it = t }));
字段说明:
- dtImportData:数据源1
- orderList:数据源2
- dr[“标题”].ToString(),it.code:连接字段
//左连接
var dataSource = dtImportData.AsEnumerable().GroupJoin(orderList,
dr => new {a = dr["标题"].ToString()},
it => new {a = it.code},
(dr, it) => new {dr = dr, it = it.ToList()});
//左连接
var dataSource = (from dataRow in dtImportData.AsEnumerable()
join model in orderList on dataRow["标题"].ToString() equals model.code
into list
from value in list.DefaultIfEmpty()
select new { dr = dataRow, it = value });
问题:数据源2可能有重复数据导致最终数据变多,目前我的解决方法就是第二个,形成一对多的数据
完结撒花~