Возвращение коллекций - PullRequest
0 голосов
/ 18 января 2019

У меня проблемы с получением двух записей из функции при использовании коллекция. Я не знаю, что я делаю не так, заранее спасибо за любые помощь.

Функция вызова службы ...

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
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Комментарий Друзей может быть правильным, но я не знаю ваш вариант использования, поэтому, возможно, он действителен. Как указано в других комментариях / ответах, метод Load ничего не возвращает, поэтому ваша строка

return announcements;

ничего не делает. Вы фактически добавляете элементы во внутренний список, который у вас есть. Итак, я думаю, с вашим текущим кодом, это будет работать, чтобы показать вам два ваших элемента в вашем сервисном коде.

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

Очевидно, это выглядит сбивающим с толку и не то, что вы хотели. Поскольку вы наследуете от List, то вы хотите добавить элементы к себе в функции Load. Поэтому я считаю, что следующий код будет работать. Ключ заключается в том, чтобы использовать просто Добавить вместо объявлений. Добавить

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));
            }
        }
    }
}
}
0 голосов
/ 18 января 2019

Не уверен, что это работает.

    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
        }
    }
}

Я надеюсь, что уточнить кое-что ....

привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...