Как создать универсальный метод для возврата нескольких списков в C # - PullRequest
0 голосов
/ 20 июня 2019

Я создал универсальный метод, который возвращает один список.но мне нужно передать несколько списков, и он будет возвращать набор результатов нескольких списков в mvc, используя Entity Framework.

public void ExecuteList<T>(out List<T> obj, string sql, params object[] parameters) where T : class
    {
        using (var db = _context)
        {
            var cmd = db.Database.Connection.CreateCommand();
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(parameters);
            try
            {
                db.Database.Connection.Open();
                using (var reder = cmd.ExecuteReader())
                {
                    obj = ((IObjectContextAdapter)db).ObjectContext.Translate<T>(reder).ToList();

                }
            }
            finally
            {
                db.Database.Connection.Close();
                cmd.Dispose();
            }
        }
    }

когда я вызываю этот метод в моем контроллере, он выдаст мне один список.

   public ActionResult Index()
    { 
        List<SqlParameter> parameterList = new List<SqlParameter>();
        parameterList.Add(new SqlParameter("@pageNo", 1));
        parameterList.Add(new SqlParameter("@pageSize", 5));            
        SqlParameter[] parameters = parameterList.ToArray();
        List<PostModel> PostModel = new List<PostModel>();           
        Uow.ExecuteList<PostModel>(out PostModel, "[dbo].[sp_getdata]", parameters);  
        return View();
    }

но мне нужно пропустить несколько списков, и это даст мне несколько результатов списка.

           List<SqlParameter> parameterList = new List<SqlParameter>();
        parameterList.Add(new SqlParameter("@pageNo", 1));
        parameterList.Add(new SqlParameter("@pageSize", 5)); 
        SqlParameter[] parameters = parameterList.ToArray();
        List<PostModel> PostModel = new List<PostModel>();
        List<Tag> Tag = new List<Tag>();
        Uow.ExecuteList<PostModel,Tag>(out PostModel, out Tag, "[dbo].[sp_Getdata]", parameters);  

, пожалуйста, помогите мне, как выполнить вышеуказанное требование.

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете использовать значение кортежа, чтобы сделать это.

 (ReturnType1 returnName1, ReturnType2 returnName2) Foo<T>(argument...)

Например

(T postModel, U tag) ExecuteList<T, U>(argument...)
{
      // the code
      return (postModel, tag);
}

Универсальный метод может использовать некоторый тип так же, как код, использующий <T, U>, а T и U - два типа.

...