【问题标题】:How to Create generic method to return multiple list in c#如何在 C# 中创建泛型方法以返回多个列表
【发布时间】:2019-06-20 06:04:49
【问题描述】:

我创建了一个返回单个列表的通用方法。但我需要传递多个列表,它会使用实体框架在 mvc 中返回多个列表结果集。

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);  

请帮我完成上述要求。

【问题讨论】:

  • 这个很不清楚,请花点时间更详细地解释您的需求和愿望(而不是在 cmets)编辑问题

标签: c# asp.net-mvc list entity-framework generic-list


【解决方案1】:

你可以使用值元组来做到这一点。

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

例如

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

泛型方法可以使用某种类型,就像使用&lt;T, U&gt; 的代码一样,T 和U 是两种类型。

【讨论】:

  • 以上代码对我没有用。我想传递多个带有 out 参数的列表,但想使用可选参数,并且 类型是可选的。 ExecuteList(out List obj, out List obj1, string sql, params object[] parameters) where T : class above code and (out List obj, out List obj1) 两者都应该是可选的。请帮我解决我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 2021-01-25
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
相关资源
最近更新 更多