传递参数的方法
问题描述:
我具备的功能如下图所示:传递参数的方法
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.MemberStatus
或member.MemberStatus
以外的其他变量到Queries
函数,我做了..要么是QueryMultiple
或Query
在Dapper
我的做法是正确的吗?或任何其他建议?
感谢
答
我解决我自己的问题后,像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,而不是重复打开连接,然后返回。
也许这不是一个最好的答案,但这是我想出的,它工作正常。
谢谢
您可以使用dapper扩展使其更通用。请参阅存储库模式:https://*.com/a/45460483/5779732 –