I'm stuck on this issue. I know it can be done nicely with LINQ (I don't want to use multiple foreach loops), but I simply cannot get it to work. Here is the problem:
I have two classes:
Class Invoice
public class Invoice
{
public int InvoiceID { get; set; }
public string Name { get; set; }
public DateTime DueDate { get; set; }
public Invoice(int ID, string sName, DateTime dt_Date)
{
this.InvoiceID = ID;
this.Name = sName;
this.DueDate = dt_Date;
}
}
and Class Activity
public class Activity
{
public int ActivityID { get; set; }
public int InvoiceID { get; set; }
public int Count { get; set; }
public double Price { get; set; }
public Activity(int ID, int InvoiceID, int iCount, double dPrice)
{
this.ActivityID = ID;
this.InvoiceID = InvoiceID;
this.Count = iCount;
this.Price = dPrice;
}
}
The logic is that Each Invoice contains multiple Activities. E.g. you have a bill from a shop (Invoice), which includes items such as bread, butter, milk (Activities).
What I want to do is that based on user selected Date, I want to return total amount paid (basically I want to perform SUM of all bills from specific Date period).
Here is what I have:
//user selected DateTime - for the sake of test we make it current day
DateTime selectedDate = DateTime.Now;
//Retrieve invocies that match user selected Date
var retrievedInvoices = invList
.Where(n => n.DueDate.ToShortDateString() == selectedDate.ToShortDateString());
This is fine, as we have retrieved list of all Invoices based on desired Date. But now? I tried something as following:
//now make SUM of activities that match retrievedInvoices -> look at their
//ID's and if match is found, then multiply price x count
double dResult = invActivity
.Where(n => retrievedInvoices.Where(x=>x.InvoiceID == n.InvoiceID))
.Sum(n => n.Price * n.Count);
But it is not working. I am not that proficient in LINQ so there might be more elegant way of doing it (maybe in one line of code) but I don't know.
Could you guys help me with this one, please?
EDIT:
Interesting thing to note also for others that might be looking at this thread: I have first tried to use List in order to retrieve my list of invoices that match specific time period (DateTime_From and DateTime_To); but it behaved strangely as sometimes it worker correctly, sometimes not (even though the code was correct). After I changed List <Invoice> retrievedInvoice to var retrievedInvoice it suddenly worked without a problem. I don't understand why this is so, but I will definitely be more aware next time of what type do I use.
Thanks again folks!
invListobject is?