Adding items to list

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

LVL 8
CamilliaAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ste5anSenior DeveloperCommented:
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
CamilliaAuthor Commented:
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
Walter PadrónCommented:
I think this is what you want

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

Open in new window


Best regards
0
CompTIA Network+

Prepare for the CompTIA Network+ exam by learning how to troubleshoot, configure, and manage both wired and wireless networks.

CamilliaAuthor Commented:
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
Walter PadrónCommented:
@Camilla i reread your comments. You don't need a List  you need to add the records to table FullFilmentBatch. Is this correct?
0
CamilliaAuthor Commented:
that's correct, Walter.
0
CamilliaAuthor Commented:
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
Walter PadrónCommented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
CamilliaAuthor Commented:
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
CamilliaAuthor Commented:
Actually, I can still use your code. I'll post back.
0
CamilliaAuthor Commented:
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.