Can't convert a list of objects with a child list if the child list is empty using linq?












0















I have this bit of code to convert one list of objects to another list of objects. The code works fine but not if the Messages property is empty. I thought using Any with the ?: operator would fix it but it hasn't, instead I get a Null Reference Exception.



var TemporaryMessageGroupList = MyList.Select(x => new MessageGroupModel()
{
Id = x.Id,
Name = x.Name,
DisplayPicture = x.DisplayPicture,
LastMessage = x.LastMessage,
Archived = x.Archived,
Messages = (x.Messages.Any() ? x.Messages.Select(y => new MessageModel()
{
Id = y.Id,
CreatorId = y.CreatorId,
Content = y.Content,
TimeSent = y.TimeSent,
GroupId = y.GroupId,
HasAttachment = y.HasAttachment,
AttachmentImage = y.AttachmentImage,
IsRead = y.IsRead
}).ToList() : new List<MessageModel>()),
Members = x.Members.Select(c => new UserModel()
{
Id = c.Id,
FullName = c.FullName,
DisplayPicture = c.DisplayPicture
}).ToList()
}).ToList();


I just want to be able to convert one list of objects to another like above, if anyone knows another way to do it to overcome the issue, let me know, thanks!










share|improve this question























  • x.Messages != null

    – Hogan
    Jan 2 at 19:07
















0















I have this bit of code to convert one list of objects to another list of objects. The code works fine but not if the Messages property is empty. I thought using Any with the ?: operator would fix it but it hasn't, instead I get a Null Reference Exception.



var TemporaryMessageGroupList = MyList.Select(x => new MessageGroupModel()
{
Id = x.Id,
Name = x.Name,
DisplayPicture = x.DisplayPicture,
LastMessage = x.LastMessage,
Archived = x.Archived,
Messages = (x.Messages.Any() ? x.Messages.Select(y => new MessageModel()
{
Id = y.Id,
CreatorId = y.CreatorId,
Content = y.Content,
TimeSent = y.TimeSent,
GroupId = y.GroupId,
HasAttachment = y.HasAttachment,
AttachmentImage = y.AttachmentImage,
IsRead = y.IsRead
}).ToList() : new List<MessageModel>()),
Members = x.Members.Select(c => new UserModel()
{
Id = c.Id,
FullName = c.FullName,
DisplayPicture = c.DisplayPicture
}).ToList()
}).ToList();


I just want to be able to convert one list of objects to another like above, if anyone knows another way to do it to overcome the issue, let me know, thanks!










share|improve this question























  • x.Messages != null

    – Hogan
    Jan 2 at 19:07














0












0








0








I have this bit of code to convert one list of objects to another list of objects. The code works fine but not if the Messages property is empty. I thought using Any with the ?: operator would fix it but it hasn't, instead I get a Null Reference Exception.



var TemporaryMessageGroupList = MyList.Select(x => new MessageGroupModel()
{
Id = x.Id,
Name = x.Name,
DisplayPicture = x.DisplayPicture,
LastMessage = x.LastMessage,
Archived = x.Archived,
Messages = (x.Messages.Any() ? x.Messages.Select(y => new MessageModel()
{
Id = y.Id,
CreatorId = y.CreatorId,
Content = y.Content,
TimeSent = y.TimeSent,
GroupId = y.GroupId,
HasAttachment = y.HasAttachment,
AttachmentImage = y.AttachmentImage,
IsRead = y.IsRead
}).ToList() : new List<MessageModel>()),
Members = x.Members.Select(c => new UserModel()
{
Id = c.Id,
FullName = c.FullName,
DisplayPicture = c.DisplayPicture
}).ToList()
}).ToList();


I just want to be able to convert one list of objects to another like above, if anyone knows another way to do it to overcome the issue, let me know, thanks!










share|improve this question














I have this bit of code to convert one list of objects to another list of objects. The code works fine but not if the Messages property is empty. I thought using Any with the ?: operator would fix it but it hasn't, instead I get a Null Reference Exception.



var TemporaryMessageGroupList = MyList.Select(x => new MessageGroupModel()
{
Id = x.Id,
Name = x.Name,
DisplayPicture = x.DisplayPicture,
LastMessage = x.LastMessage,
Archived = x.Archived,
Messages = (x.Messages.Any() ? x.Messages.Select(y => new MessageModel()
{
Id = y.Id,
CreatorId = y.CreatorId,
Content = y.Content,
TimeSent = y.TimeSent,
GroupId = y.GroupId,
HasAttachment = y.HasAttachment,
AttachmentImage = y.AttachmentImage,
IsRead = y.IsRead
}).ToList() : new List<MessageModel>()),
Members = x.Members.Select(c => new UserModel()
{
Id = c.Id,
FullName = c.FullName,
DisplayPicture = c.DisplayPicture
}).ToList()
}).ToList();


I just want to be able to convert one list of objects to another like above, if anyone knows another way to do it to overcome the issue, let me know, thanks!







c# list linq






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 2 at 19:04









LewisLewis

1515




1515













  • x.Messages != null

    – Hogan
    Jan 2 at 19:07



















  • x.Messages != null

    – Hogan
    Jan 2 at 19:07

















x.Messages != null

– Hogan
Jan 2 at 19:07





x.Messages != null

– Hogan
Jan 2 at 19:07












2 Answers
2






active

oldest

votes


















1














Calling Any upon Messages will yield the said exception if Messages is null, instead do:



 Messages = x.Messages?.Select(y => new MessageModel()
{
Id = y.Id,
CreatorId = y.CreatorId,
Content = y.Content,
TimeSent = y.TimeSent,
GroupId = y.GroupId,
HasAttachment = y.HasAttachment,
AttachmentImage = y.AttachmentImage,
IsRead = y.IsRead
}).ToList() ?? new List<MessageModel>(),



  • This uses the "null-propagation" operator ?. to prevent calling Select on Messages if it's null.

  • We then use the "null coalescing" operator ?? to generate a new empty list in the case of Messages being null.






share|improve this answer

































    0














    you could try something like this, Make sure that x.Messages is not NULL and prefered to be an empty collection if empty, also make sure the properties for Messages are not null for the original object or they are nullable on the receiving object:



    Messages = (x.Messages?.Where(msg => msg != null).Select(y => new 
    MessageModel() {}).ToList()





    share|improve this answer
























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54011815%2fcant-convert-a-list-of-objects-with-a-child-list-if-the-child-list-is-empty-usi%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      Calling Any upon Messages will yield the said exception if Messages is null, instead do:



       Messages = x.Messages?.Select(y => new MessageModel()
      {
      Id = y.Id,
      CreatorId = y.CreatorId,
      Content = y.Content,
      TimeSent = y.TimeSent,
      GroupId = y.GroupId,
      HasAttachment = y.HasAttachment,
      AttachmentImage = y.AttachmentImage,
      IsRead = y.IsRead
      }).ToList() ?? new List<MessageModel>(),



      • This uses the "null-propagation" operator ?. to prevent calling Select on Messages if it's null.

      • We then use the "null coalescing" operator ?? to generate a new empty list in the case of Messages being null.






      share|improve this answer






























        1














        Calling Any upon Messages will yield the said exception if Messages is null, instead do:



         Messages = x.Messages?.Select(y => new MessageModel()
        {
        Id = y.Id,
        CreatorId = y.CreatorId,
        Content = y.Content,
        TimeSent = y.TimeSent,
        GroupId = y.GroupId,
        HasAttachment = y.HasAttachment,
        AttachmentImage = y.AttachmentImage,
        IsRead = y.IsRead
        }).ToList() ?? new List<MessageModel>(),



        • This uses the "null-propagation" operator ?. to prevent calling Select on Messages if it's null.

        • We then use the "null coalescing" operator ?? to generate a new empty list in the case of Messages being null.






        share|improve this answer




























          1












          1








          1







          Calling Any upon Messages will yield the said exception if Messages is null, instead do:



           Messages = x.Messages?.Select(y => new MessageModel()
          {
          Id = y.Id,
          CreatorId = y.CreatorId,
          Content = y.Content,
          TimeSent = y.TimeSent,
          GroupId = y.GroupId,
          HasAttachment = y.HasAttachment,
          AttachmentImage = y.AttachmentImage,
          IsRead = y.IsRead
          }).ToList() ?? new List<MessageModel>(),



          • This uses the "null-propagation" operator ?. to prevent calling Select on Messages if it's null.

          • We then use the "null coalescing" operator ?? to generate a new empty list in the case of Messages being null.






          share|improve this answer















          Calling Any upon Messages will yield the said exception if Messages is null, instead do:



           Messages = x.Messages?.Select(y => new MessageModel()
          {
          Id = y.Id,
          CreatorId = y.CreatorId,
          Content = y.Content,
          TimeSent = y.TimeSent,
          GroupId = y.GroupId,
          HasAttachment = y.HasAttachment,
          AttachmentImage = y.AttachmentImage,
          IsRead = y.IsRead
          }).ToList() ?? new List<MessageModel>(),



          • This uses the "null-propagation" operator ?. to prevent calling Select on Messages if it's null.

          • We then use the "null coalescing" operator ?? to generate a new empty list in the case of Messages being null.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 2 at 19:16

























          answered Jan 2 at 19:07









          AomineAomine

          42.6k74677




          42.6k74677

























              0














              you could try something like this, Make sure that x.Messages is not NULL and prefered to be an empty collection if empty, also make sure the properties for Messages are not null for the original object or they are nullable on the receiving object:



              Messages = (x.Messages?.Where(msg => msg != null).Select(y => new 
              MessageModel() {}).ToList()





              share|improve this answer




























                0














                you could try something like this, Make sure that x.Messages is not NULL and prefered to be an empty collection if empty, also make sure the properties for Messages are not null for the original object or they are nullable on the receiving object:



                Messages = (x.Messages?.Where(msg => msg != null).Select(y => new 
                MessageModel() {}).ToList()





                share|improve this answer


























                  0












                  0








                  0







                  you could try something like this, Make sure that x.Messages is not NULL and prefered to be an empty collection if empty, also make sure the properties for Messages are not null for the original object or they are nullable on the receiving object:



                  Messages = (x.Messages?.Where(msg => msg != null).Select(y => new 
                  MessageModel() {}).ToList()





                  share|improve this answer













                  you could try something like this, Make sure that x.Messages is not NULL and prefered to be an empty collection if empty, also make sure the properties for Messages are not null for the original object or they are nullable on the receiving object:



                  Messages = (x.Messages?.Where(msg => msg != null).Select(y => new 
                  MessageModel() {}).ToList()






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jan 2 at 19:15









                  DrormatDrormat

                  6415




                  6415






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54011815%2fcant-convert-a-list-of-objects-with-a-child-list-if-the-child-list-is-empty-usi%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      MongoDB - Not Authorized To Execute Command

                      How to fix TextFormField cause rebuild widget in Flutter

                      in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith