传递参数的方法

问题描述:

我具备的功能如下图所示:传递参数的方法

public IEnumerable<Member> Members(Member models) 
    { 
     string query = "SELECT a.[Name], b.[MemberStatus] FROM [Member] a WITH (NOLOCK) INNER JOIN [MemberStatus] b WITH (NOLOCK) ON a.[ID] = b.[ID]"; 

     using (IDbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"])) 
     { 
      conn.Open(); 

      return conn.Query<Member, MemberStatus, Member>(query, (member, memberStatus) => 
      { 
       member.MemberStatus = memberStatus; 

       return member; 
      }).ToList(); 
     } 
    } 

,现在我想打一个泛型函数可以被重复使用,因为它会超过1,代码为类似那样(来自矮胖的地图)。

这里是我做上面的代码可重用的代码:

public TReturn Queries<TParent, TChild, TReturn>(string query, Func<TParent, TChild, TReturn> map, object arguments) 
     { 
      using (IDbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"])) 
      { 
       conn.Open(); 

       return conn.Query<TParent, TChild, TReturn>(query, (parent, child) => 
       { 
        // not sure on how to pass from here 
        return parent; 
       }); 
      } 
     } 

,我还可以在会员通话功能是这样的:

public IEnumerable<Member> Members(Member models) 
    { 
     string query = "SELECT a.[Name], b.[MemberStatus] FROM [Member] a WITH (NOLOCK) INNER JOIN [MemberStatus] b WITH (NOLOCK) ON a.[ID] = b.[ID]"; 

     return Helper.Queries<Member, MemberStatus, Member>(query, (member, memberStatus) => member.MemberStauts = memberStatus); 
    } 

但我不真的很肯定如何通过member.MemberStatusmember.MemberStatus以外的其他变量到Queries函数,我做了..要么是QueryMultipleQuery在Dapper

我的做法是正确的吗?或任何其他建议?

感谢

+0

您可以使用dapper扩展使其更通用。请参阅存储库模式:https://*.com/a/45460483/5779732 –

我解决我自己的问题后,像1小时努力,下面是解决方案:

例如一般的功能是被叫Helper另一个类,你要拨打的通用从另一个类功能DataAccess

Helper类:

public IEnumerable<TReturn> Queries<TParent, TChild, TReturn>(string sql, Func<TParent, TChild, TReturn> map, string splitOn = "ID") 
     { 
      using (IDbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"])) 
      { 
       conn.Open(); 

       return conn.Query(sql, map, splitOn: splitOn); 
      } 
     } 

你打电话,像这样:

string sql = "SELECT a.[Name], b.[MemberStatus] FROM [Member] a WITH (NOLOCK) INNER JOIN [MemberStatus] b WITH (NOLOCK) ON a.[ID] = b.[ID]"; 

return Helper.Queries<Member, MemberStatus, Member>(sql, (member, memberStatus) => 
      { 
       member.MemberStatus = memberStatus; 

       return member; 
      }); 

这样,如果我有什么更需要地图,我只是叫Helper.Queries,而不是重复打开连接,然后返回。

也许这不是一个最好的答案,但这是我想出的,它工作正常。

谢谢