Как вернуть более одного списка элементов? - PullRequest
1 голос
/ 18 июня 2019

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

CustomerController

public class CustomerController : ApiController
    {
        List<CustomerModel> customers = new List<CustomerModel>();
        private CustomerController()
        {

            var _data = ViewCustomer();
            if (_data.Rows.Count > 0)
            {
                customers = (from DataRow _dr in _data.Rows
                             select new CustomerModel()
                             {
                                 custId = Convert.ToInt32(_dr["custId"]),
                                 custName = Convert.ToString(_dr["custName"]),
                                 custAddress = Convert.ToString(_dr["custAddress"]),
                                 custContact = Convert.ToString(_dr["custContact"]),
                                 custStatus = Convert.ToString(_dr["custStatus"]),
                                 agentId = Convert.ToInt32(_dr["agentId"]),
                                 agentContact = Convert.ToString(_dr["agentContact"])
                             }).ToList();
            }
        }

        // GET: api/Customer
        public List<CustomerModel> Get()
        {
            return customers;
        }

        // GET: api/Customer/5
        public CustomerModel Get(string num)
        {
            return customers.Where(x => x.agentContact.Equals(num)).FirstOrDefault();
        }

DataRepository

 namespace DataLibrary.Repository
    {
        public class DataRepository
        {

            public static DataTable ViewCustomer()
            {
                try
                {
                    DataLayers CustData = new DataLayers();
                    CustData.cmdType = CommandType.StoredProcedure;
                    CustData.SQL = "CustomerStoredProcedure";
                    CustData.paramVal = new string[,]
                    {
                        { "@custId", ""},
                        { "@custName", ""},
                        { "@custAddress", ""},
                        { "@custContact", ""},
                        { "@custStatus", ""},
                        { "@agentId", ""},
                        { "@statement", "Select"}
                    };
                    return CustData.GetData();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
    }

Это сохраненный процесс.

create procedure CustomerStoredProcedure
     (
    custId int(11),
    custName varchar(100),
    custAddress varchar(100),
    custContact varchar(20),
    custStatus varchar(20),
    agentId int(11),
    statement varchar(30)
    )
    begin
    if statement = 'Select' then
    select c.custId, c.custName, c.custAddress, c.custContact, c.custStatus, c.agentId,
    a.agentId, a.agentContact 
    from customer c 
    inner join agent a on c.agentId = a.agentId;
    elseif statement = 'Insert' then
    insert into customer ( custName, custAddress, custContact, custStatus, agentId) 
    values (custName, custAddress, custContact, custStatus, agentId);
    elseif statement = 'Update' then
    update customer set custName = custName, custAddress = custAddress,
    custContact = custContact, custStatus = custStatus, agentId = agentId where
    custtId = custId;
    elseif statement = 'Delete' then
    delete from customer where custId = custId;
    end if;

Это мой DataLayers

public class DataLayers
    {
        public static string success = "Record successfully added!";
        public static string failed = "Error: Data could not added, Please check your inputted data(s)!";

        public CommandType cmdType { get; set; }
        public string SQL { get; set; }
        public string[,] paramVal { get; set; }

        public static MySqlConnection Config()
        {
            var conn = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString.ToString());
            conn.Open();
            return conn;
        }

        public DataTable GetData()
        {
            MySqlCommand cmd = new MySqlCommand(this.SQL, Config());
            cmd.CommandType = cmdType;
            cmd.CommandTimeout = 0;
            if (this.paramVal != null)
            {
                for (int i = 0; i <= paramVal.GetUpperBound(0); i++)
                {
                    cmd.Parameters.AddWithValue(this.paramVal[i, 0].ToString().Trim(), this.paramVal[i, 1].ToString().Trim());
                }
            }
            DataTable dt = new DataTable();
            var dataAdapter = new MySqlDataAdapter(cmd);
            dataAdapter.Fill(dt);
            dataAdapter.Dispose();
            cmd.Dispose();
            Config().Close();
            return dt;
        }

        public DataTable GetData(bool Error)
        {
            try
            {
                MySqlCommand cmd = new MySqlCommand(this.SQL, Config());
                cmd.CommandType = cmdType;
                cmd.CommandTimeout = 0;
                if (this.paramVal != null)
                {
                    for (int i = 0; i <= paramVal.GetUpperBound(0); i++)
                    {
                        cmd.Parameters.AddWithValue(this.paramVal[i, 0].ToString().Trim(), this.paramVal[i, 1].ToString().Trim());
                    }
                }
                DataTable dt = new DataTable();
                var dataAdapter = new MySqlDataAdapter(cmd);
                dataAdapter.Fill(dt);
                dataAdapter.Dispose();
                cmd.Dispose();
                Config().Close();
                return dt;
            }
            catch (Exception ex)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Error");
                dt.Columns.Add("Message");
                dt.Rows.Add("Error: ", ex.Message.Replace("Tables", "Table").Replace("MySql", "Database"));
                return dt;
            }
        }
    }

Это мой DataRepository

 public class DataRepository
    {
        public static DataTable ViewAgent()
        {
            try
            {

                DataLayers AgentData = new DataLayers();
                AgentData.cmdType = CommandType.StoredProcedure;
                AgentData.SQL = "AgentStoredProcedure";
                AgentData.paramVal = new string[,]
                {
                    { "@agentId", "" },
                    { "@agentName", ""},
                    { "@agentAddress", ""},
                    { "@agentContact", ""},
                    { "@agentStatus", ""},
                    { "@catId", ""},
                    { "@statement", "Select"}
                };
                return AgentData.GetData();
            }
            catch (Exception)
            {
                throw;
            }
        }

        public static DataTable ViewCustomer()
        {
            try
            {
                DataLayers CustData = new DataLayers();
                CustData.cmdType = CommandType.StoredProcedure;
                CustData.SQL = "CustomerStoredProcedure";
                CustData.paramVal = new string[,]
                {
                    { "@custId", ""},
                    { "@custName", ""},
                    { "@custAddress", ""},
                    { "@custContact", ""},
                    { "@custStatus", ""},
                    { "@agentId", ""},
                    { "@statement", "Select"}
                };
                return CustData.GetData();
            }
            catch (Exception)
            {
                throw;
            }
        }
    }

вернуть все записи

enter image description here

вернуть только одну запись, (неверный результат)

enter image description here

это правильный результат записи

enter image description here

1 Ответ

2 голосов
/ 18 июня 2019

Так много вопросов.

  • Почему у вас есть личный конструктор?
  • Что такое DataLayers, это какая-то домашняя библиотека доступа к данным?
  • Почему хранимая процедура не позволяет выполнять поиск по @agentContact?
  • Зачем загружать все данные из базы данных при создании контроллера вместо фильтрации по требованию?

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

public List<CustomerModel> Get(string num)
{
    return customers.Where(x => x.agentContact.Equals(num)).ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...