大佬教程收集整理的这篇文章主要介绍了LinqMethod 实现 LeftJoin,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有时候我们想实现 leftJoin 但是 Linq 提供的 Join 相当于是 INNER JOIN
,于是就打算实现一个 LeftJoin
的扩展。
如果要使用到左连接,你需要使用 DefaultIfEmpty 来在没有join到数据的时候返回默认的集合
源代码:https://github.com/WeihanLi/WeihanLi.Common/blob/dev/src/WeihanLi.Common/Extensions/EnumerableExtension.cs#L149
/// <sumMary>
/// LeftJoin extension
/// </sumMary>
/// <typeparam name="TOuter">outer</typeparam>
/// <typeparam name="Tinner">inner</typeparam>
/// <typeparam name="TKey">TKey</typeparam>
/// <typeparam name="TResult">TResult</typeparam>
/// <param name="outer">outer collection</param>
/// <param name="inner">inner collection</param>
/// <param name="outerKeySELEctor">outerKeySELEctor</param>
/// <param name="innerKeySELEctor">innerKeySELEctor</param>
/// <param name="resultSELEctor">resultSELEctor</param>
/// <returns></returns>
public static IEnumerable<TResult> LeftJoin<TOuter,Tinner,TKey,TResult>(this IEnumerable<TOuter> outer,IEnumerable<Tinner> inner,Func<TOuter,TKey> outerKeySELEctor,Func<Tinner,TKey> innerKeySELEctor,TResult> resultSELEctor)
{
return outer
.GroupJoin(inner,outerKeySELEctor,innerKeySELEctor,(outerObj,inners) => new
{
outerObj,inners = inners.DefaultIfEmpty()
})
.SELEctMany(a => a.inners.SELEct(innerObj => resultSELEctor(a.outerObj,innerObj)));
}
var posts = new[] { new { PostId = 1,Posttitle = "12333",},new { PostId = 2,};
var postTags = new[] { new { PostId = 1,Tag = "HHH" } };
var result = posts.LeftJoin(postTags,p => p.postId,pt => pt.PostId,(p,pt) => new { p.postId,p.posttitle,pt?.Tag }).ToArray();
Console.WriteLine(result.ToJson());
输出:
[{"PostId":1,"Posttitle":"12333","Tag":"HHH"},{"PostId":2,"Posttitle":"12333"}]
@H_417_33@memo
这是使用 LinqMethod 实现 LeftJoin,如果要使用 linq 查询语法实现左连接请参考这篇文章
以上是大佬教程为你收集整理的LinqMethod 实现 LeftJoin全部内容,希望文章能够帮你解决LinqMethod 实现 LeftJoin所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。