Jump to content


Check out our Community Blogs

Register and join over 40,000 other developers!


Recent Status Updates

View All Updates

Photo
- - - - -

Handling LINQ to SQL results faster

c# linq sql

This topic has been archived. This means that you cannot reply to this topic.
3 replies to this topic

#1 Tchpowdog

Tchpowdog

    CC Regular

  • Member
  • PipPipPip
  • 44 posts

Posted 16 December 2014 - 09:49 AM

I have a query (var dayTrans...) that executes very fast.  It pulls back numbers of transactions the summed amount for every hour in a specified day.  The problem I'm having is getting that data into variables, this slows the process down A LOT.  The fastest solution I've come up with is to loop through each record of the query result, switch/case on the "Hour" field and throw the data into it's corresponding variables.  There's got to be a quick way to do this... please help!

 

string storeLocID = "";
            if (location == "Airline")
                storeLocID = "300";
            else if (location == "Perkins")
                storeLocID = "299";
            else if (location == "Greenwell")
                storeLocID = "4";
            List<int> merCodes = new List<int>();
            if (DropDownList1.SelectedIndex == 0)
            {
                merCodes.Add(1);
                merCodes.Add(2);
                merCodes.Add(3);
                merCodes.Add(4);
                merCodes.Add(5);
                merCodes.Add(6);
                merCodes.Add(7);
                merCodes.Add(8);
                merCodes.Add(9);
                merCodes.Add(10);
                merCodes.Add(13);
                merCodes.Add(14);
                merCodes.Add(15);
                merCodes.Add(16);
                merCodes.Add(17);
                merCodes.Add(18);
                merCodes.Add(19);
                merCodes.Add(20);
                merCodes.Add(21);
                merCodes.Add(22);
                merCodes.Add(23);
                merCodes.Add(24);
                merCodes.Add(25);
                merCodes.Add(26);
                merCodes.Add(29);
                merCodes.Add(32);
            }
            else
            {
                merCodes.Add(Convert.ToInt32(DropDownList1.SelectedValue));
            }


            int bqhs1trans = 0;
            int bqhs2trans = 0;
            int bqhs3trans = 0;
            int bqhs4trans = 0;
            int bqhs5trans = 0;
            int bqhs6trans = 0;
            int bqhs7trans = 0;
            int bqhs8trans = 0;
            int bqhs9trans = 0;
            int bqhs10trans = 0;
            int bqhs11trans = 0;
            int bqhs12trans = 0;
            int bqhs13trans = 0;
            int bqhs14trans = 0;
            int bqhs15trans = 0;
            int bqhs16trans = 0;
            int bqhs17trans = 0;
            int bqhs18trans = 0;
            int bqhs19trans = 0;
            int bqhs20trans = 0;
            int bqhs21trans = 0;
            int bqhs22trans = 0;
            int bqhs23trans = 0;
            int bqhs24trans = 0;


            decimal bqhs1sales = 0;
            decimal bqhs2sales = 0;
            decimal bqhs3sales = 0;
            decimal bqhs4sales = 0;
            decimal bqhs5sales = 0;
            decimal bqhs6sales = 0;
            decimal bqhs7sales = 0;
            decimal bqhs8sales = 0;
            decimal bqhs9sales = 0;
            decimal bqhs10sales = 0;
            decimal bqhs11sales = 0;
            decimal bqhs12sales = 0;
            decimal bqhs13sales = 0;
            decimal bqhs14sales = 0;
            decimal bqhs15sales = 0;
            decimal bqhs16sales = 0;
            decimal bqhs17sales = 0;
            decimal bqhs18sales = 0;
            decimal bqhs19sales = 0;
            decimal bqhs20sales = 0;
            decimal bqhs21sales = 0;
            decimal bqhs22sales = 0;
            decimal bqhs23sales = 0;
            decimal bqhs24sales = 0;


            using (BQDataDataContext data = new BQDataDataContext())
            {
                var dayTrans = data.RTS_Transactions.Where(i => i.BusinessDate == Variables.curBQDDate.Date && i.StoreLocationID == storeLocID && i.ReceiptDateTime >= new DateTime(Variables.curBQDDate.Year, Variables.curBQDDate.Month, Variables.curBQDDate.Day, 0, 0, 0) && i.ReceiptDateTime < new DateTime(Variables.curBQDDate.Year, Variables.curBQDDate.Month, Variables.curBQDDate.AddDays(1).Day, 0, 0, 0) && merCodes.Contains(i.RTS_ItemLineSale.MerchandiseCode))
                                                     .GroupBy(i => new { i.Hour })
                                                     .Select(i => new
                                                     {
                                                         i.Key.Hour,
                                                         Trans = i.Select(x => x.TransactionID).Distinct().Count(),
                                                         Amount = i.Sum(x => x.RTS_ItemLineSale.SalesAmount)
                                                     });


                foreach (var dayTran in dayTrans)
                {
                    switch (dayTran.Hour)
                    {
                        case 0:
                            bqhs1trans = dayTran.Trans;
                            bqhs1sales = dayTran.Amount;
                            break;
                        case 1:
                            bqhs2trans = dayTran.Trans;
                            bqhs2sales = dayTran.Amount;
                            break;
                        case 2:
                            bqhs3trans = dayTran.Trans;
                            bqhs3sales = dayTran.Amount;
                            break;
                        case 3:
                            bqhs4trans = dayTran.Trans;
                            bqhs4sales = dayTran.Amount;
                            break;
                        case 4:
                            bqhs5trans = dayTran.Trans;
                            bqhs5sales = dayTran.Amount;
                            break;
                        case 5:
                            bqhs6trans = dayTran.Trans;
                            bqhs6sales = dayTran.Amount;
                            break;
                        case 6:
                            bqhs7trans = dayTran.Trans;
                            bqhs7sales = dayTran.Amount;
                            break;
                        case 7:
                            bqhs8trans = dayTran.Trans;
                            bqhs8sales = dayTran.Amount;
                            break;
                        case 8:
                            bqhs9trans = dayTran.Trans;
                            bqhs9sales = dayTran.Amount;
                            break;
                        case 9:
                            bqhs10trans = dayTran.Trans;
                            bqhs10sales = dayTran.Amount;
                            break;
                        case 10:
                            bqhs11trans = dayTran.Trans;
                            bqhs11sales = dayTran.Amount;
                            break;
                        case 11:
                            bqhs12trans = dayTran.Trans;
                            bqhs12sales = dayTran.Amount;
                            break;
                        case 12:
                            bqhs13trans = dayTran.Trans;
                            bqhs13sales = dayTran.Amount;
                            break;
                        case 13:
                            bqhs14trans = dayTran.Trans;
                            bqhs14sales = dayTran.Amount;
                            break;
                        case 14:
                            bqhs15trans = dayTran.Trans;
                            bqhs15sales = dayTran.Amount;
                            break;
                        case 15:
                            bqhs16trans = dayTran.Trans;
                            bqhs16sales = dayTran.Amount;
                            break;
                        case 16:
                            bqhs17trans = dayTran.Trans;
                            bqhs17sales = dayTran.Amount;
                            break;
                        case 17:
                            bqhs18trans = dayTran.Trans;
                            bqhs18sales = dayTran.Amount;
                            break;
                        case 18:
                            bqhs19trans = dayTran.Trans;
                            bqhs19sales = dayTran.Amount;
                            break;
                        case 19:
                            bqhs20trans = dayTran.Trans;
                            bqhs20sales = dayTran.Amount;
                            break;
                        case 20:
                            bqhs21trans = dayTran.Trans;
                            bqhs21sales = dayTran.Amount;
                            break;
                        case 21:
                            bqhs22trans = dayTran.Trans;
                            bqhs22sales = dayTran.Amount;
                            break;
                        case 22:
                            bqhs23trans = dayTran.Trans;
                            bqhs23sales = dayTran.Amount;
                            break;
                        case 23:
                            bqhs24trans = dayTran.Trans;
                            bqhs24sales = dayTran.Amount;
                            break;
                    }
                }

 



#2 lespauled

lespauled

    CC Leader

  • Expert Member
  • PipPipPipPipPipPipPip
  • 1360 posts

Posted 16 December 2014 - 01:14 PM

This whole procedure looks like it can be done a lot more eloquently, and readable..

 

You know that C# has loops, correct?


My Blog: http://forum.codecal...699-blog-77241/
"Women and Music: I'm always amazed by other people's choices." - David Lee Roth

#3 Tchpowdog

Tchpowdog

    CC Regular

  • Member
  • PipPipPip
  • 44 posts

Posted 17 December 2014 - 07:40 AM

This whole procedure looks like it can be done a lot more eloquently, and readable..

 

You know that C# has loops, correct?

You mean like "foreach"??  Which i used... If you're referring to the "merCodes" list, there's gaps in that list of numbers.  A "for" loop on that would've used as many lines of code....  However, you haven't addressed my issue.  My issue is all code AFTER the LINQ query.  

 

The processes that take a while are the "bqhsXXtrans = dayTran.Trans" and "bqhsXXsales = dayTran.Sales"

 

If the query executes fast, why does "bqhsXXtrans = dayTran.Trans" take so long???



#4 lespauled

lespauled

    CC Leader

  • Expert Member
  • PipPipPipPipPipPipPip
  • 1360 posts

Posted 17 December 2014 - 08:00 AM

Although, it doesn't solve you problem, this whole thing can be rewritten a lot neater/cleaner.

 

I mean all the redundant code, like:

                merCodes.Add(1);
                merCodes.Add(2);
                merCodes.Add(3);
                merCodes.Add(4);
                merCodes.Add(5);
                merCodes.Add(6);
                merCodes.Add(7);
                merCodes.Add(8);
                merCodes.Add(9);
                merCodes.Add(10);
                merCodes.Add(13);
                merCodes.Add(14);
                merCodes.Add(15);
                merCodes.Add(16);
                merCodes.Add(17);
                merCodes.Add(18);
                merCodes.Add(19);
                merCodes.Add(20);
                merCodes.Add(21);
                merCodes.Add(22);
                merCodes.Add(23);
                merCodes.Add(24);
                merCodes.Add(25);
                merCodes.Add(26);
                merCodes.Add(29);
                merCodes.Add(32);

and:

            int bqhs1trans = 0;
            int bqhs2trans = 0;
            int bqhs3trans = 0;
            int bqhs4trans = 0;
            int bqhs5trans = 0;
            int bqhs6trans = 0;
            int bqhs7trans = 0;
            int bqhs8trans = 0;
            int bqhs9trans = 0;
            int bqhs10trans = 0;
            int bqhs11trans = 0;
            int bqhs12trans = 0;
            int bqhs13trans = 0;
            int bqhs14trans = 0;
            int bqhs15trans = 0;
            int bqhs16trans = 0;
            int bqhs17trans = 0;
            int bqhs18trans = 0;
            int bqhs19trans = 0;
            int bqhs20trans = 0;
            int bqhs21trans = 0;
            int bqhs22trans = 0;
            int bqhs23trans = 0;
            int bqhs24trans = 0;

and:

            decimal bqhs1sales = 0;
            decimal bqhs2sales = 0;
            decimal bqhs3sales = 0;
            decimal bqhs4sales = 0;
            decimal bqhs5sales = 0;
            decimal bqhs6sales = 0;
            decimal bqhs7sales = 0;
            decimal bqhs8sales = 0;
            decimal bqhs9sales = 0;
            decimal bqhs10sales = 0;
            decimal bqhs11sales = 0;
            decimal bqhs12sales = 0;
            decimal bqhs13sales = 0;
            decimal bqhs14sales = 0;
            decimal bqhs15sales = 0;
            decimal bqhs16sales = 0;
            decimal bqhs17sales = 0;
            decimal bqhs18sales = 0;
            decimal bqhs19sales = 0;
            decimal bqhs20sales = 0;
            decimal bqhs21sales = 0;
            decimal bqhs22sales = 0;
            decimal bqhs23sales = 0;
            decimal bqhs24sales = 0;

At a quick glance, all of these can be contained in a list, and handled that way.

 

The entire switch statement can be written into one line, something like:

 

int currentItemLocation = dayTran.Hour + 1;

 

transList[currentItemLocation] = xxxxxxx

salesList[currentItemLocation] = yyyyyyy

 

I would say rethink the entire process, and either use a list or even a dictionary to hold the items.


My Blog: http://forum.codecal...699-blog-77241/
"Women and Music: I'm always amazed by other people's choices." - David Lee Roth




Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download