我对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();
如果您需要更多说明,请与我们联系。看起来这应该有效,但我必须遗漏一些东西。
答案 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。