본문 바로가기

C#/공부기록

[C#] Linq / outjoin

ㆍoutjoin

< 없는값채우기 예제>

using System;
using System.Linq;
using System.Collections.Generic;

public class table
{
    public string date;
    public string val;
}

class ex
{
    static void Main(string[] args)
    {
        List<table> tables = new List<table>
        {
            new table { date = "20220107 00시 05분", val = (0.004).ToString() }, 
            new table { date = "20220107 00시 15분", val = (0.005).ToString() },
            new table { date = "20220107 00시 25분", val = (0.006).ToString() },
            new table { date = "20220107 00시 35분", val = (0.007).ToString() },
            new table { date = "20220107 00시 45분", val = (0.008).ToString() }
        };

        var query =
            from mintue in Enumerable.Range(0, 60).Where(o => o % 5 == 0).Select(o => o.ToString("00"))
            join table_date_mm in tables on mintue equals table_date_mm.date.Substring(13, 2) into g
            from n in g.DefaultIfEmpty()
            select new
            {
                Date = mintue,
                Val = n?.val.ToString() ?? string.Empty
                //Val = n?.val.ToString() ?? "없음"
            };


        foreach (var x in query)
        {
            Console.WriteLine(x);
        }
    }
}
 

<내가한거>

using System;
using System.Linq;
using System.Collections.Generic;

public class table
{
    public string date { get; set; }
    public double? val { get; set; }
}

class ex
{
    static void Main(string[] args)
    {
        List<table> tables = new List<table>
        {
            new table { date = "20220107 00시 05분", val = 0.004 },
            new table { date = "20220107 00시 15분", val = 0.005 },
            new table { date = "20220107 00시 25분", val = 0.006 },
            new table { date = "20220107 00시 35분", val = 0.007 },
            new table { date = "20220107 00시 45분", val = 0.008 }
        };

        var query =
            from mintue in Enumerable.Range(0, 60).Where(o => o % 5 == 0).Select(o => o.ToString("00"))
            join table_date_mm in tables on mintue equals table_date_mm.date.Substring(13, 2) into g
            from table_date_mm in g.DefaultIfEmpty(new table { val = null})
            select new
            {
                Date = mintue,
                Val = table_date_mm.val
            };


        foreach (var x in query)
        {
            Console.WriteLine(x);
        }
    }
}