简单的LINQ问题:“无法使用本地序列”错误

时间:2011-08-03 16:15:01

标签: c# linq linq-to-sql

我对LINQ很新,所以我假设我错过了一些简单的东西。我有代码生成以下错误:本地序列不能在LINQ to SQL中使用

return (from x in db.CurrentTrackings
                where x.strLocation == BarCode ||
                (from b in ChildBranches where x.strLocation == b.BarCode select b).Count() > 0 ||
                (from c in PlantCustomers where x.strLocation == c.customer_str_id select c).Count() > 0
                select x).Count();

如果您需要更多说明,请与我们联系。看起来这应该有效,但我必须遗漏一些东西。

3 个答案:

答案 0 :(得分:2)

由于LINQ-to-SQL提供程序不支持,因此不能将本地序列的子查询(例如,ChildBranches)与LINQ-to-SQL查询(即db.CurrentTrackings)混合在一起。 t支持将本地查询转换为SQL查询。 LINQ to SQL 支持本地序列的 Contains(),在这种情况下,它将其转换为WHERE X IN (Y1, Y2, Yn)语句:

 var barCodes = ChildBranches.Select(b=>b.BarCode);
 var customerIds = PlantCustomers.Select(c=>c.customer_str_id);

 return (from x in db.CurrentTrackings
         where x.strLocation == BarCode ||
               barCodes.Contains(x.strLocation) ||
               customerIds.Contains(x.strLocation)
         select x).Count();

答案 1 :(得分:1)

LocalSequences无法转换为SQL,除非您使用Contains,因此您的查询可能想要

return (from x in db.CurrentTrackings
       where 
         x.strLocation == BarCode || 
         ChildBranches.Select(b=>b.BarCode).Contains(x.strLocation) ||
         PlantCustomers.Select(c=>c.customer_str_id).Contains(x.strLocation) 
        select x).Count();

答案 2 :(得分:0)

该查询生成一个将发送到SQL Server的SQL语句,但是ChildBranches和PlantCustomers集合无法传递给SQL Server。