I would like to reorganize the list of objects and classify them by the date of entry in a side by side view so I can compare the trades across instruments by day.
so this view needs to be reorganised

as the following
The only logic I created was to use a Dictionary of dynamo objects. However it forces me to define the columns everytime. Is there a more efficient approach?
code in linqpad share. linqpad share
void Main()
{
List<STSmyTrade> testoj = new List<STSmyTrade>(); // object 1
STSmyTrade a1 = new STSmyTrade();
a1.instrument = "eurusd";
a1.entryPrice = 3;
a1.entryTime = DateTime.Now.AddDays(1);
testoj.Add(a1);
STSmyTrade a2 = new STSmyTrade();
a2.instrument = "eurusd";
a2.entryPrice = 6;
a2.entryTime = DateTime.Now.AddDays(2);
testoj.Add(a2);
STSmyTrade a3 = new STSmyTrade();
a3.instrument = "audusd";
a3.entryPrice = 3;
a3.entryTime = DateTime.Now;
testoj.Add(a3);
STSmyTrade a4 = new STSmyTrade();
a4.instrument = "audusd";
a4.entryPrice = 6;
a4.entryTime = DateTime.Now.AddDays(2);
testoj.Add(a4);
testoj.Dump();
// need to compare the 2 instruments sorted by date
Dictionary<DateTime, ExpandoObject> analysiscompare = new Dictionary<DateTime, ExpandoObject>();
foreach (STSmyTrade t in testoj ) // loop first time comparing before and after
{
dynamic eo;
if (!analysiscompare.Keys.Contains(t.entryTime.Date))// if i dont have a record in the dictionary object, create it.
{
eo = new ExpandoObject();
eo.day=t.entryTime.Date.ToString("yyyy-MM-dd");// just assign the day.
eo.eurusdentryTime = null;
eo.eurusdentryPrice = null;
eo.audusdentryTime = null;
eo.audusdentryPrice = null;
analysiscompare.Add(t.entryTime.Date, eo);
}
//dynamic eo;
eo = analysiscompare[t.entryTime.Date];
switch (t.instrument)
{
case "eurusd":
eo.eurusdentryTime = t.entryTime;
eo.eurusdentryPrice = t.entryPrice;
break;
case "audusd":
eo.audusdentryTime = t.entryTime;
eo.audusdentryPrice = t.entryPrice;
break;
}
}
analysiscompare.Values.ToList().Dump("side_by_side_view");
}
class STSmyTrade
{
public DateTime entryTime { get; set; }
public string instrument { get; set; }
public double entryPrice { get; set; }
}
The only way, I can make this work is by creating a custom column mapping to each unique object(audusd, eurusd). However this is not scalable.


Assuming you don't have two entries for a currency on the same day, you can group by date and select the eurusd and audusd entries per group, eg.
You probably want to sort the results, but your original doesn't seem to be sorted, so I haven't sorted mine either.