C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了LinqMethod 实现 LeftJoin大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

LinqMethod 实现 LeftJoin

Intro

有时候我们想实现 leftJoin 但是 Linq 提供的 Join 相当于是 INNER JOIN,于是就打算实现一个 LeftJoin 的扩展。
如果要使用到左连接,你需要使用 DefaultIfEmpty 来在没有join到数据的时候返回认的集合

Solution

代码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)));
}

Use

使用起来和 Join 差不多,下面来展示一个示例

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 查询语法实现左连接请参这篇文章

Reference

大佬总结

以上是大佬教程为你收集整理的LinqMethod 实现 LeftJoin全部内容,希望文章能够帮你解决LinqMethod 实现 LeftJoin所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: