2009-05-01 35 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有你的答案:

查询与列表参数不能 预编译,因为 翻译查询是依赖于列表中的项目数量 。