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