0

I am having difficulty getting two records out of a function when using collection. I don't know what I am doing wrong, thank you in advance for any help.

Service calling function...

Announcements announcements = new Announcements(ID, moduleID, _config, _logger);

return announcements;  // this does not contain anything although Announcements load functions has two record
namespace Api.Collection
{
    public class Announcements : List<Announcement>
    {
        IConfiguration _config;
        ILoggerManager _logger;

        private string _uspGetAnnouncement = "storedproced_GetAnnouncemnt";

        public List<Announcement> announcements = new List<Announcement>();
        public Announcements()
        {

        }
        public Announcements(int employeeID, int moduleID, IConfiguration config, ILoggerManager logger)
        {
            _config = config;
            _logger = logger;

            if (employeeID > 0 && moduleID > 0)
            {
                Load(employeeID, moduleID);
            }
        }

        public virtual void Load(int employeeID, int moduleID)
        {     
            List<SqlParameter> lParam = new List<SqlParameter>();

            Util.DataUtil dataUtil = new Util.DataUtil(_config);
            SqlParameter param;

            if (employeeID > 0 && moduleID > 0)
            {
                param = new SqlParameter("@employeeID", employeeID);
                lParam.Add(param);

                param = new SqlParameter("@moduleID", moduleID);
                lParam.Add(param);
            }

            DataTable dt = Util.GetDataTable(_uspGetAnnouncement, lParam.ToArray());

            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    announcements.Add(new Announcement(dr, dt.Rows.Count, _config, _logger));
                }
            }
            return announcements;   *** this has 2 records
        }
    }
}
Grant Winney
  • 61,140
  • 9
  • 100
  • 152
  • you call a function with the keyword void (which means no return value), and then try to call a return function ? That do not work. – Glowhollow Jan 18 '19 at 16:11
  • 1
    `Announcements : List` don't do this. See [this question](https://stackoverflow.com/questions/21692193/why-not-inherit-from-listt) for an explanation of why – A Friend Jan 18 '19 at 16:15

2 Answers2

0

A Friends comment could be right, but I don't know your use case so maybe it is valid. As sort of stated in other comments/answers the Load method doesn't return anything so your line

return announcements;

does nothing. Your are actually adding the items to the internal list you have. So I'm guessing with your current code, this would work to show you your two items in your service code.

Announcements announcements = new Announcements(ID, moduleID, _config, _logger);
return announcements.announcements;

Obviously that looks confusing and isn't what you wanted. Since you are inheriting from List what you want to do is add the items to itself in the Load function. So I believe the following code would work. The key being to use just Add instead of announcements.Add

namespace Api.Collection
{
public class Announcements : List<Announcement>
{
    IConfiguration _config;
    ILoggerManager _logger;

    private string _uspGetAnnouncement = "storedproced_GetAnnouncemnt";

    public Announcements()
    {

    }
    public Announcements(int employeeID, int moduleID, IConfiguration config, ILoggerManager logger)
    {
        _config = config;
        _logger = logger;

        if (employeeID > 0 && moduleID > 0)
        {
            Load(employeeID, moduleID);
        }
    }

    public virtual void Load(int employeeID, int moduleID)
    {     
        List<SqlParameter> lParam = new List<SqlParameter>();

        Util.DataUtil dataUtil = new Util.DataUtil(_config);
        SqlParameter param;

        if (employeeID > 0 && moduleID > 0)
        {
            param = new SqlParameter("@employeeID", employeeID);
            lParam.Add(param);

            param = new SqlParameter("@moduleID", moduleID);
            lParam.Add(param);
        }

        DataTable dt = Util.GetDataTable(_uspGetAnnouncement, lParam.ToArray());

        if (dt.Rows.Count > 0)
        {
            foreach (DataRow dr in dt.Rows)
            {
                Add(new Announcement(dr, dt.Rows.Count, _config, _logger));
            }
        }
    }
}
}
-1

Not sure if that works.

    namespace Api.Collection
{
    public class Announcements : List<Announcement>
    {
        IConfiguration _config;
        ILoggerManager _logger;

        private string _uspGetAnnouncement = "storedproced_GetAnnouncemnt";

        public List<Announcement> announcements = new List<Announcement>();
        public Announcements()
        {

        }
        public Announcements(int employeeID, int moduleID, IConfiguration config, ILoggerManager logger)
        {
            _config = config;
            _logger = logger;

            if (employeeID > 0 && moduleID > 0)
            {
                var value = Load(employeeID, moduleID);
            }
        }

        public virtual List<Announcement> Load(int employeeID, int moduleID)
        {     
            List<SqlParameter> lParam = new List<SqlParameter>();

            Util.DataUtil dataUtil = new Util.DataUtil(_config);
            SqlParameter param;

            if (employeeID > 0 && moduleID > 0)
            {
                param = new SqlParameter("@employeeID", employeeID);
                lParam.Add(param);

                param = new SqlParameter("@moduleID", moduleID);
                lParam.Add(param);
            }

            DataTable dt = Util.GetDataTable(_uspGetAnnouncement, lParam.ToArray());

            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    announcements.Add(new Announcement(dr, dt.Rows.Count, _config, _logger));
                }
            }
            return announcements;   *** this has 2 records
        }
    }
}

i hope that clarify something....

greetings

Glowhollow
  • 142
  • 2
  • 13