编译的查询和“参数不能是序列”

时间:2009-05-01 20:59:05

标签: linq-to-sql contains linq.compiledquery

我认为编译的查询将执行与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);         
}

1 个答案:

答案 0 :(得分:11)

This article有你的答案:

  

不能使用列表参数进行查询   预编译,因为翻译   查询取决于数字   列表中的项目。