2014-08-21 6 views
0

Я пытаюсь запросить Entity/Table и определить, существует ли запись, которая соответствует списку элементов.Entity Framework DbContext Где в запросе

Другими словами, у меня есть массив имен, я хочу, чтобы построить свой запрос, чтобы сделать что-то вроде:

string[] fileList = {"Clients", "Jobs", "People"}; 
ICollection<DocumentsView> documentList = await _dataContext.FindAllAsync<DocumentsView>(fileList.Containts(a.name))); 

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

ICollection<DocumentsView> documentList = await _dataContext.FindAllAsync<DocumentsView>(a=>a.name == "Clients" && a.name == "Jobs" && a.name == "People"); 

Вот мой метод FindAllAsync для запроса DbContext:

public async Task<ICollection<T>> FindAllAsync<T>(Expression<Func<T, bool>> match) where T : class 
{ 
    return await _context.Set<T>().Where(match).ToListAsync(); 
} 
+1

Не ваш лямбда отсутствует 'а =>' в первом фрагменте кода? 'await _dataContext.FindAllAsync (a => fileList.Containts (a.name));' – MarcinJuraszek

+0

Он также использует «Containts» вместо «Contains». –

+0

Ну, да, это так, и все работает отлично. Я попытался использовать (fileList.Contains (a => a.name)), который, очевидно, не работал. Лол спасибо! Если вы хотите выразить это как ответ, я приму это. –

ответ

1

Contains вызов должен работать нормально, Entity Framework преобразует его в IN() пункта при генерации SQL запроса.

Однако ваш код отсутствует a => при попытке позвонить Contains:

await _dataContext.FindAllAsync<DocumentsView>(a => fileList.Contains(a.name))); 
Смежные вопросы