How can I solve "Query results cannot be listed more than once"?

if I try to write the codes below: error return to me: Query results cannot be listed more than once

  public void StartTransaction()
        {
            using (var stockMovementCtx = new StockMovementCtxDataContext())
            using (var scope = new TransactionScope())
            {

                var stockMovementItems = from s in stockMovementCtx.spStockMovementForTransaction(TicketID, ItemTypeNo, ItemID, TransactionType,
                                                                                                  FromLocation, ToLocation, Qty, PersonelNo, cuser
                                                                                                  )
                                         select s;

                ReturnCode = stockMovementItems.First().ReturnCode;
               // MessageBox.Show(stockMovementItems.First().ToString());
                ReturnMsg = stockMovementItems.First().ReturnMessage;
                TransactionType = stockMovementItems.First().TransactionType;
                TicketID = stockMovementItems.First().TicketID;

alt text http://i45.tinypic.com/avistc.png

More details: alt text http://i48.tinypic.com/wss2va.png

More details:

alt text http://i48.tinypic.com/waonbq.png

+3
source share
6 answers

Short fix:

var FirstChild = stockMovementItems.First();

then

ReturnCode = FirstChild.ReturnCode;
//etc...

or

(from s in stockMovementCtx.spStockMovementForTransaction(TicketID, ItemTypeNo, ItemID, TransactionType, FromLocation, ToLocation, Qty, PersonelNo, cuser) select s).ToList();

but the latter is a kind of abuse of Linq.

, , stockMovementCtx.spStockMovementForTransaction(..) , . , First(), .

+1

.
- ?
.

public void StartTransaction()
        {
            using (var stockMovementCtx = new StockMovementCtxDataContext())
            using (var scope = new TransactionScope())
            {

                var stockMovementItems = from s in stockMovementCtx.spStockMovementForTransaction(TicketID, ItemTypeNo, ItemID, TransactionType,
                                                                                                  FromLocation, ToLocation, Qty, PersonelNo, cuser
                                                                                                  )
                                         select s;

                var item = stockMovementItems.FirstOrDefault()
                if (item != null)
                {
                    ReturnCode = (item.ReturnCode;
                   // MessageBox.Show((item.ToString());
                    ReturnMsg = item.ReturnMessage;
                    TransactionType = item.TransactionType;
                    TicketID = item.TicketID;
+2

var firstItem = stockMovementItems.First();
ReturnCode = firstItem.ReturnCode;
ReturnMsg = firstItem.ReturnMessage;
...
+1

First() ! , First() , ReturnCode ReturnMessage ( , - .current ).

, , First(), , First() , , ( , ).

, First(), ( beter, ).

0

, DataReader . , ( ).

0

ReturnCode = stockMovementItems.First().ReturnCode; // MessageBox.Show(stockMovementItems.First().ToString()); ReturnMsg = stockMovementItems.First().ReturnMessage; TransactionType = stockMovementItems.First().TransactionType; TicketID = stockMovementItems.First().TicketID;

.. First();? ToList() linq First(). . Istedigini sonuc tek bir kayittan ibaret degilse, zaman icin ToList() kullanmanda fayda vardir.

varible, . Boylece 1 kere enumerate etmis olur, diger sonuclarini atadigin degiskenden alabilirsiniz.

var myResult = stockMovementItems.First();
ReturnCode = myResult.ReturnCode;
ReturnMsg = myResult.ReturnMessage;

Gibi..

0

Source: https://habr.com/ru/post/1752207/


All Articles