2015-03-16 3 views
1

У меня есть функции, которые вставляют сущности в базу данных. Например, один из них выглядит следующим образом:Преобразование функции в общую функцию

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); 
    } 
} 

Я хотел бы превратить его в общую функцию, но я не уверен, что Whet это лучший способ передать функцию лямбды в методе Where.

Что-то вроде:

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); 
    } 
} 

Должен ли я использовать делегатов, лямбды или создать эту функцию в качестве метода класса Entity?

+3

Нет смысла использовать асинхронные методы, если вы просто собираетесь их синхронно ждать. Используйте синхронные методы или 'await' методы async. У вас также есть метод async без вызовов 'await', и метод возвращает' void', если это не так. – Servy

ответ

1

Вы могли бы сделать что-то вроде:

InsertEntities<T>(ObservableCollection<T> entities, Func<T, bool> exp) 
.Where(exp) 

Кроме того, я хотел бы прочитать комментарий выше. Я не думаю, что ваша асинхронность настроена совершенно правильно.

Смежные вопросы