c# – Linq to SQL在使用局部变量时给出了NotSupportedException

在我看来,使用变量临时存储IQueryable是否很重要.请参阅下面的简化示例:

这有效:

List<string> jobNames = new List<string> { "ICT" };
var ictPeops = from p in dataContext.Persons
               where (  from j in dataContext.Jobs
                        where jobNames.Contains(j.Name)
                        select j.ID).Contains(p.JobID)
               select p;

但是当我使用变量临时存储子查询时,我得到一个异常:

List<string> jobNames = new List<string> { "ICT" };
var jobs = from j in dataContext.Jobs
           where jobNames.Contains(j.Name)
           select j.ID;
var ictPeops = from p in dataContext.Persons
               where jobs.Contains(p.JobID)
               select p;

“System.NotSupportedException: Queries
with local collections are not
supported”

我不知道问题是什么.这个逻辑不应该在LINQ中起作用吗?

更新:
昨天我找到了使用多个变量时获得1个查询的解决方法:

  var jobs = from j in dataContext.Jobs
             where jobNames.Contains(j.Name)
             select j.ID;
  var ictPeops = from p in dataContext.Persons
                 join j in jobs on p.JobID equals j
                 select p;

但我仍然感到困惑.任何人都可以解释为什么第一个查询在使用变量时不起作用?

最佳答案 LINQ-2-SQL将您的代码转换为T-SQL.它可以轻松地将您的作业名称列表作为参数传递.但是,在失败的查询中,您正在尝试将SQL表(Persons)加入C#对象(作业);这是一个复杂的C#类型,无法转换为SQL.在第二个查询中使用它之前,您可能需要将作业转换为简单的int数组. LINQ-2-SQL可能能够处理它.

点赞