SolvedPrivate

Adding items to list

Posted on 2014-12-04
11
40 Views
Last Modified: 2016-02-18
This can't be hard but I can't figure it out. Tried several things. I know it's probably a type mismatch that I'm doing.

I have a table: FulfullmentBatch with UserId and ConfirmationCode

I have this loop. I want to populate batch.ConfirmationCode  = consumer.ConfirmationCode
and batch.userId = consumer.id in that loop. The "foreach" loop I have won't work, of course.

 public bool Update(IList<FulfillmentModel> model)
            {

                var batch = new List<FulfillmentBatch>();
                try
                {
                    //consumer
                    foreach (var f in model)
                    {
                      
                            var consumer =
                                _dataContext.Consumers.Where(m => ((m.Id == f.Id) && (f.Usertype == "C"))) //model has both consumer and dealer row. Use this flag to loop thru corresponding tables. Set in Stored proc
                                    .SingleOrDefault(m => m.ConfirmationCode == f.ConfirmationCode);

                            if (consumer != null) consumer.SubmissionStatusId = (int)StatusSubmission.Status.Fulfilled;
                          //*** populate here

                            //** this won't work because batch is a new list
                               foreach (var row in batch)
                        {
                            row.UserId = consumer.Id;
                            row.ConfirmationCode = consumer.ConfirmationCode;
                        }
                    }

                 

                _dataContext.SubmitChanges();

Open in new window

0
Comment
Question by:Camillia
  • 7
  • 3
11 Comments
 
LVL 32

Assisted Solution

by:Stefan Hoffmann
Stefan Hoffmann earned 250 total points
Comment Utility
Why a loop? "Populate" normally means adding. Thus instead of this loop, a

batch.Add(new FulfillmentBatch() { ConfirmationCode  = consumer.ConfirmationCode, userId = consumer.id }); 

Open in new window


should work.

btw, what is a list of batches: new List<FulfillmentBatch>()?
0
 
LVL 7

Author Comment

by:Camillia
Comment Utility
btw, what is a list of batches: new List<FulfillmentBatch>()?

FulfillmentBatch is actually a table. I added it to datacontext. I want to insert into this table.

I don't think I should be using a table directly. I probably should have a class for it.

I have this model class which probably be used and then FulfillmentBatch be inserted into using this class?

 public class FulfillmentModel
    {

        public int Id { get; set; }
        public string ConfirmationCode {get; set;}
...
}

Open in new window


(I did something like your code but had a mistake in the new section)
0
 
LVL 10

Expert Comment

by:Walter Padrón
Comment Utility
I think this is what you want

batch.Add( new FulfillmentBatch() { UserId = consumer.Id, ConfirmationCode = consumer.ConfirmationCode } );

Open in new window


Best regards
0
 
LVL 7

Author Comment

by:Camillia
Comment Utility
This one developer here says I shouldn't use FulfillmentBatch directly because it's a table in the database. I should have a class (that FulfillmentModel class I posted above). Populate that model, then use the model to insert into
FulfillmentBatch table.

(I have a deadline tomorrow so the code above should get me going . I can refactor later)
0
 
LVL 10

Expert Comment

by:Walter Padrón
Comment Utility
@Camilla i reread your comments. You don't need a List  you need to add the records to table FullFilmentBatch. Is this correct?
0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 7

Author Comment

by:Camillia
Comment Utility
that's correct, Walter.
0
 
LVL 7

Author Comment

by:Camillia
Comment Utility
So, that foreach I have, gets the rows, I update the rows in Consumer table. But then, I want the rows that were updated in Consumer table to be inserted in FulfillmentBatch table (only 2 columns tho..not all the columns).

I can do it with a stored proc but want to do it in LINQ.
0
 
LVL 10

Accepted Solution

by:
Walter Padrón earned 250 total points
Comment Utility
This should work

 public bool Update(IList<FulfillmentModel> model)
{

//DELETED:                var batch = new List<FulfillmentBatch>();
    try
    {
        //consumer
        foreach (var f in model)
        {
        
                var consumer =
                    _dataContext.Consumers.Where(m => ((m.Id == f.Id) && (f.Usertype == "C"))) //model has both consumer and dealer row. Use this flag to loop thru corresponding tables. Set in Stored proc
                        .SingleOrDefault(m => m.ConfirmationCode == f.ConfirmationCode);
    
                if (consumer != null) consumer.SubmissionStatusId = (int)StatusSubmission.Status.Fulfilled;
            //*** populate here

            // ADDED
            var batch = new FulfillmentBatch() { UserId = consumer.Id, ConfirmationCode = consumer.ConfirmationCode };
            _datacontext.FullFilmentBatchTABLENAME.Add( batch );            
        }
    
        _dataContext.SubmitChanges();
    }
}                                  

Open in new window

0
 
LVL 7

Author Comment

by:Camillia
Comment Utility
let me try, thanks. However, I would need the "batch" to be inserted AFTER  _dataContext.SubmitChanges();

This is just in case something fails in _dataContext.SubmitChanges(); line of code.

That's why I was using a list.
0
 
LVL 7

Author Comment

by:Camillia
Comment Utility
Actually, I can still use your code. I'll post back.
0
 
LVL 7

Author Comment

by:Camillia
Comment Utility
Yeah, changed it like this. Now I can insert after the update to Consumer table

  var batch = new FulfillmentBatch();
                try
                {
                    //consumer
                    foreach (var f in model)
                    {
                      
                            var consumer =
                                _dataContext.Consumers.Where(m => ((m.Id == f.Id) && (f.Usertype == "C"))) //model has both consumer and dealer row. Use this flag to loop thru corresponding tables. Set in Stored proc
                                    .SingleOrDefault(m => m.ConfirmationCode == f.ConfirmationCode);

                        if (consumer != null)
                        {
                            consumer.SubmissionStatusId = (int)StatusSubmission.Status.Fulfilled;
                            
                             //batch.Add(new FulfillmentBatch() { ConfirmationCode = consumer.ConfirmationCode, UserId = consumer.Id });

                             // ADDED
                              batch = new FulfillmentBatch() { UserId = consumer.Id, ConfirmationCode = consumer.ConfirmationCode };
                          
                        }

                    }

                _dataContext.SubmitChanges();
                _dataContext.FulfillmentBatches.InsertOnSubmit(batch);

Open in new window

0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now