我有一段这样的代码:( MyClassX只是我的业务对象的简写,以后可能会扩展...
select member_ID,
count(*)
from (
select distinct a.eventID, m.memberID
from attendants a
inner join cars c
on a.carID = c.car_ID
inner join members m
on c.memberID = m.memberID
group by a.eventID, m.memberID
)
group by memberID
并希望以某种方式对其进行重构,以避免重复并使其更易于维护。一种尝试类似于
var conn = new SQLiteAsyncConnection(dbPath);
conn.CreateTableAsync<MyClass1>().Wait();
conn.CreateTableAsync<MyClass2>().Wait();
conn.CreateTableAsync<MyClass3>().Wait();
conn.CreateTableAsync<MyClass4>().Wait();
conn.CreateTableAsync<MyClass5>().Wait();
...
conn.CreateTableAsync<MyClass20>().Wait();
,它似乎不是很表现力(并且不调用Wait())。 我该如何利用模板/功能编程来获得更具表现力和简洁的代码?
编辑:我认为这不是重复的,因为我已经回答了如何在原始问题中调用通用方法,但是我对生成的代码不满意。表达力。
答案 0 :(得分:1)
您可以通过将结果强制转换为Wait
来调用Task
:
var createMethod = conn.GetType().GetMethod("CreateTableAsync");
Task[] createTasks = bo_types.Select(t => (Task)createMethod.MakeGenericMethod(t).Invoke(conn, null)).ToArray();
Tasks.WaitAll(createTasks);