linq-to-sql - 编译查询和 "Parameters cannot be sequences"

标签 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);         
}

最佳答案

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/

相关文章:

c# - 类似 MVC 的 Webforms 自动生成页面

java - TreeSet contains 方法对我不起作用

css - 如何使用 title~= 必须包含空格的 CSS 属性选择器?

regex - 如何检查字符串是否包含特定字符

c# - Entity Framework Core 2.2 编译查询结构参数在本地评估

c# - 在 LINQ 表达式中创建选定项时获取序号位置

c# - 如何使用 Linq To SQL 显示所有记录?

c# - 使用单个 TransactionScope 包装大量数据库更新时出现异常

Linq-to-sql 编译查询返回不属于提交的 DataContext 的对象?