NHibernate execute the same query several times

131 Views Asked by At

I have stucked in executing NHibernate query several times with changing only one parameter.

Here is my code

  if (channelCount > 1)
                {
                    for (int i = 0; i < channelCount; i++)
                    {
                        int minOrderItemFirst = Session.GetNamedQuery("GetMinOrderItem")
                            .SetInt32("year", item.Year)
                            .SetString("orderKind", item.OrderKind)
                            .SetInt32("orderNo", item.OrderNo)
                            .SetInt32("orderItem", item.OrderItem)
                            .UniqueResult<int>();

                        
                        //I have minOrderItemFirst as int and I need to use it as .SetInt32("orderItem")
                        // Session.GetNamedQuery("GetMinOrderItem")
                        //    .SetInt32("year", item.Year)
                        //    .SetString("orderKind", item.OrderKind)
                        //    .SetInt32("orderNo", item.OrderNo)
                        //    .SetInt32("orderItem", minOrderItemFirst)
                        //    .UniqueResult<int>(); .... etc as said in for loop
                        // I am ok to increment minOrderItemFirst in every next call
    
                    } 

Thanks for help in advance!

1

There are 1 best solutions below

0
hoozr On

I got something like that, but I am not sure it is an ideal solution. Someone can explain how to achieve it with less code or more elegant?

 if (chCount > 1)
                {
                    int[] results = new int[chCount + 1];

                    int firstNumber = Session.GetNamedQuery("GetMinOrderItem")
                        .SetInt32("year", item.Year)
                        .SetString("orderKind", item.OrderKind)
                        .SetInt32("orderNo", item.OrderNo)
                        .SetInt32("orderItem", item.OrderItem)
                        .UniqueResult<int>();

                    results[0] = firstNumber;

                    for (int i = 1; i < chCount; i++)
                    {

                        results[i] = Session.GetNamedQuery("GetMinOrderItem")
                            .SetInt32("year", item.Year)
                            .SetString("orderKind", item.OrderKind)
                            .SetInt32("orderNo", item.OrderNo)
                            .SetInt32("orderItem", results[i - 1])
                            .UniqueResult<int>();
                    }
                }