2013-04-12 6 views
1

Я использую Entity Framework 5 в приложении MVC. Я сохраняю список совпадений, и до того, как я сделаю фактическое обновление, я хочу загрузить все найденные совпадения в EF-память.Linq для объектов с любой ошибкой возврата

У меня есть следующий код (который работает). _context мой EfDbContext:

public bool UpdateMatches(IEnumerable<Match> matchesToUpdate, int userID) 
{ 
    matchesToUpdate = matchesToUpdate as List<Match> ?? matchesToUpdate.ToList(); 
    var matchIDs = matchesToUpdate.Select(m => m.ID).ToArray(); 

    _context.Matches.Where(x => matchIDs.Contains(x.ID)).Load(); 
} 

Но то, что я на самом деле хочу что-то вроде этого:

public bool UpdateMatches(IEnumerable<Match> matchesToUpdate, int userID) 
{ 
    _context.Matches.Where(m => matchesToUpdate.Any(x => x.ID == m.ID)).Load(); 
} 

Но я получаю ошибку

«Невозможно создать постоянное значение типа «Совпадения». В этом контексте поддерживаются только примитивные типыили типы перечислений ».

Я также пробовал его с Содержит, но не повезло. Что я делаю не так?

ответ

2

Получить список ID из вашей коллекции matchesToUpdate и использовать Contains вместо Any:

public bool UpdateMatches(IEnumerable<Match> matchesToUpdate, int userID) 
{ 
    var ids = matchesToUpdate.Select(x => x.ID).ToList(); 
    _context.Matches.Where(m => ids.Contains(m.ID)).Load(); 
} 

Это приведет IN заявления в сгенерированном запросе SQL.

+0

Привет, Марцин, спасибо! Это действительно работает, как и в моем первом примере. Но это невозможно сделать в одной строке? Вам всегда нужно сначала получить список идентификаторов? – kloarubeek

+0

Боюсь, что да. – MarcinJuraszek

+0

нормально, слишком плохо. И что это тогда? http://stackoverflow.com/questions/2846013/does-entity-framework-4-have-a-contains-feature – kloarubeek

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