I'm pretty new using LINQ + DataTables and I'm stuck for some time. I have searched the internet for some similar problems and solution, but its not exactly what I want to accomplish.
I'll try my best to describe the case and setup:
In text :
I have 3 DataTables filled from a SQL query.
- acdTable (6 rows)
- hourTable (5 rows)
- transferTable (4 rows)
acdTable contains the following Columns :
Weeknumber, Date (dd-mm-yyyy), Daynumber, Scores
hourTable contains the following Columns :
Weeknumber, Date (dd-mm-yyyy), Daynumber, Hours
transferTable contains the following Columns :
Weeknumber, Date (dd-mm-yyyy), Daynumber, Transfered
The problem is when I use LINQ to join the DataTables with eachother (on Weeknumber) I will only get 4 rows back instead of the 6 I need.
If I'm right this has something to do with the joined values which does not exist in either table f.e :
acdTable has Weeknumber 20 with Date 21-7-2020 and hourTable has Weeknumber 20 without 21-7-2020 same goes for transferTable
In this case I would like to see :
If a row from acdTable does not exist in acdTable or hourTable :
Weeknumber 20, Date 21-7-2020, Scores 10, Hours 0, Transfers 0
If a row from acdTable exist in acdTable and or hourTable :
Weeknumber 20, Date 21-7-2020, Scores 10, Hours 32, Transfers 12
I hope the example is clear for what I want to accomplish.
My Code:
var merge = from acd in acdTable.AsEnumerable()
join hours in hourTable.AsEnumerable()
on new
{
Weeknumber= acd.Field<int>("Weeknumber"),
Date= acd.Field<string>("Date")
}
equals new
{
Weeknumber= hours.Field<int>("Weeknumber"),
Date= hours.Field<string>("Date")
}
join transfers in transferTable.AsEnumerable()
on new
{
Weeknumber= acd.Field<int>("Weeknumber")
}
equals new
{
Weeknumber= transfers.Field<int>("Weeknumber")
}
select new
{
Weeknumber= acd.Field<int>("Weeknumber"),
Date= acd.Field<string>("Datum"),
Transfers= transfers.Field<string>("Transfers"),
Sales = acd.Field<int>("Sales"),
Hours = hours.Field<double>("Hours")
};
My Result :
[0] { Weeknumber = 29, Date = "13-07-2020", Transfers = "2", Sales = 201, Hours = 44 } <Anonymous Type>
[1] { Weeknumber = 29, Date = "13-07-2020", Transfers = "3", Sales = 201, Hours = 44 } <Anonymous Type>
[2] { Weeknumber = 29, Date = "13-07-2020", Transfers = "1", Sales = 201, Hours = 44 } <Anonymous Type>
[3] { Weeknumber = 29, Date = "13-07-2020", Transfers = "2", Sales = 201, Hours = 44 } <Anonymous Type>
[4] { Weeknumber = 29, Date = "14-07-2020", Transfers = "2", Sales = 156, Hours = 38.25 } <Anonymous Type>
[5] { Weeknumber = 29, Date = "14-07-2020", Transfers = "3", Sales = 156, Hours = 38.25 } <Anonymous Type>
[6] { Weeknumber = 29, Date = "14-07-2020", Transfers = "1", Sales = 156, Hours = 38.25 } <Anonymous Type>
[7] { Weeknumber = 29, Date = "14-07-2020", Transfers = "2", Sales = 156, Hours = 38.25 } <Anonymous Type>
[8] { Weeknumber = 29, Date = "15-07-2020", Transfers = "2", Sales = 155, Hours = 37.5 } <Anonymous Type>
[9] { Weeknumber = 29, Date = "15-07-2020", Transfers = "3", Sales = 155, Hours = 37.5 } <Anonymous Type>
[10] { Weeknumber = 29, Date = "15-07-2020", Transfers = "1", Sales = 155, Hours = 37.5 } <Anonymous Type>
[11] { Weeknumber = 29, Date = "15-07-2020", Transfers = "2", Sales = 155, Hours = 37.5 } <Anonymous Type>
[12] { Weeknumber = 29, Date = "16-07-2020", Transfers = "2", Sales = 122, Hours = 26 } <Anonymous Type>
[13] { Weeknumber = 29, Date = "16-07-2020", Transfers = "3", Sales = 122, Hours = 26 } <Anonymous Type>
[14] { Weeknumber = 29, Date = "16-07-2020", Transfers = "1", Sales = 122, Hours = 26 } <Anonymous Type>
[15] { Weeknumber = 29, Date = "16-07-2020", Transfers = "2", Sales = 122, Hours = 26 } <Anonymous Type>
[16] { Weeknumber = 29, Date = "17-07-2020", Transfers = "2", Sales = 0, Hours = 0 } <Anonymous Type>
[17] { Weeknumber = 29, Date = "17-07-2020", Transfers = "3", Sales = 0, Hours = 0 } <Anonymous Type>
[18] { Weeknumber = 29, Date = "17-07-2020", Transfers = "1", Sales = 0, Hours = 0 } <Anonymous Type>
[19] { Weeknumber = 29, Date = "17-07-2020", Transfers = "2", Sales = 0, Hours = 0 } <Anonymous Type>
Result I want to accomplish :
{Weeknumber = 29 , Date = "13-07-2020", Transfers = "2", Sales = "201", Hours = 44}
{Weeknumber = 29 , Date = "14-07-2020", Transfers = "3", Sales = "156", Hours = 38,25}
{Weeknumber = 29 , Date = "15-07-2020", Transfers = "1", Sales = "155", Hours = 37,50}
{Weeknumber = 29 , Date = "16-07-2020", Transfers = "2", Sales = "122", Hours = 26}
{Weeknumber = 29 , Date = "17-07-2020", Transfers = "0", Sales = "0", Hours = 0}
{Weeknumber = 29 , Date = "18-07-2020", Transfers = "0", Sales = "0", Hours = 0}
What am I doing wrong or what can I do to get the result I want.
I hope anyone can help me.