I have the function like below:
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();
}
}
and now I want to make a generic function which can be re-usable, since it will be more than 1 that the code is similar like that (map from dapper).
Here is the code that I make for the above code that can be re-usable:
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;
});
}
}
And I can call in Members function like this:
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);
}
But I am not really sure on how to pass the member.MemberStatus
or the other variables other than member.MemberStatus
to the Queries
function that I made.. Either it is QueryMultiple
or Query
in Dapper
Is my way of doing it is correct? or any other suggestions?
Thanks