我认为编译的查询会执行与 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);
}
最佳答案
This article有你的答案:
Queries with list parameters cannot be precompiled because the translation of the query is dependent on the number of items in the list.
关于linq-to-sql - 编译查询和 "Parameters cannot be sequences",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813256/