2009-05-01 4 views
7

Я думал, что скомпилированные запросы будут выполнять тот же перевод запросов, что и DataContext. Тем не менее, я получаю ошибку во время выполнения, когда пытаюсь использовать запрос с вызовом метода .Contains. Где я ошибся?Скомпилированные запросы и «Параметры не могут быть последовательностями»

//private member which holds a compiled query. 
Func<DataAccess.DataClasses1DataContext, List<int>, List<DataAccess.TestRecord>> 
    compiledFiftyRecordQuery = System.Data.Linq.CompiledQuery.Compile 
    <DataAccess.DataClasses1DataContext, List<int>, List<DataAccess.TestRecord>> 
    ((dc, ids) => dc.TestRecords.Where(tr => ids.Contains(tr.ID)).ToList()); 

//this method calls the compiled query. 
public void FiftyRecordCompiledQueryByID() 
{ 
    List<int> IDs = GetRandomInts(50); 

    //System.NotSupportedException 
    //{"Parameters cannot be sequences."} 

    List<DataAccess.TestRecord> results = compiledFiftyRecordQuery 
    (myContext, IDs);   
} 

ответ

11

This article имеет свой ответ:

Запросы с параметрами списка не может быть прекомпилирован, потому что перевод запрос зависит от количества элементов в списке.

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