将函数转换为通用函数
Transform function to generic function
我有将实体插入数据库的功能。例如,其中一个看起来像:
public async void InsertInspections(ObservableCollection<Inspections> inspections)
{
_connection.CreateTableAsync<Inspections>().Wait();
foreach (var inspection in inspections)
{
var task = _connection.Table<Inspections>().
Where(v => v.InspectionId == inspection.InspectionId).ToListAsync();
task.Wait();
if (task.Result.Any())
_connection.UpdateAsync(inspection);
else
_connection.InsertAsync(inspection);
}
}
我想将其转换为通用函数,但我不确定在 Where
方法中传递 lambda 函数的最佳方式是什么。
类似于:
public async void InsertEntities<T>(ObservableCollection<T> entities)
{
_connection.CreateTableAsync<T>().Wait();
foreach (var entity in entities)
{
var task = _connection.Table<T>().
// what is the best way to pass this function to the method ???
Where(v => v.InspectionId == entity.InspectionId).ToListAsync();
task.Wait();
if (task.Result.Any())
_connection.UpdateAsync(entity);
else
_connection.InsertAsync(entity);
}
}
我应该使用委托、lambda 还是将此函数创建为实体的方法class?
你可以这样做:
InsertEntities<T>(ObservableCollection<T> entities, Func<T, bool> exp)
.Where(exp)
另外,我会阅读上面的评论。我认为您的异步设置不太正确。
我有将实体插入数据库的功能。例如,其中一个看起来像:
public async void InsertInspections(ObservableCollection<Inspections> inspections)
{
_connection.CreateTableAsync<Inspections>().Wait();
foreach (var inspection in inspections)
{
var task = _connection.Table<Inspections>().
Where(v => v.InspectionId == inspection.InspectionId).ToListAsync();
task.Wait();
if (task.Result.Any())
_connection.UpdateAsync(inspection);
else
_connection.InsertAsync(inspection);
}
}
我想将其转换为通用函数,但我不确定在 Where
方法中传递 lambda 函数的最佳方式是什么。
类似于:
public async void InsertEntities<T>(ObservableCollection<T> entities)
{
_connection.CreateTableAsync<T>().Wait();
foreach (var entity in entities)
{
var task = _connection.Table<T>().
// what is the best way to pass this function to the method ???
Where(v => v.InspectionId == entity.InspectionId).ToListAsync();
task.Wait();
if (task.Result.Any())
_connection.UpdateAsync(entity);
else
_connection.InsertAsync(entity);
}
}
我应该使用委托、lambda 还是将此函数创建为实体的方法class?
你可以这样做:
InsertEntities<T>(ObservableCollection<T> entities, Func<T, bool> exp)
.Where(exp)
另外,我会阅读上面的评论。我认为您的异步设置不太正确。