C#/공부기록
[C#] Linq / outjoin
프디
2023. 1. 14. 23:37
ㆍ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);
}
}
}
