Pergunta

Eu pensei que as consultas compilados iria realizar a mesma tradução consulta como DataContext. No entanto, eu estou recebendo um erro de tempo de execução quando tento usar uma consulta com uma chamada de método .Contains. Onde eu errado se foi?

//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);         
}
Foi útil?

Solução

Este artigo tem sua resposta:

Consultas com parâmetros lista não pode ser precompilado porque a tradução de a consulta é dependente do número de itens na lista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top