我和Linq2SQL碰壁了。我喜欢它,它的灵活性令人惊叹,但我遇到了一些有趣的问题。我希望这只是我对它缺乏了解,而这真的有一个解决方案。举个例子。如下所示的linq2sql查询:
//一些本地的ids集合
var terminalID = new List<int>(){1, 2, 3, 4, 5};// Linq语句的一部分:
queryDataIDs.Where(q => q.DataEventKeyID == 2 && terminalID.Contains((int)q.ValueDecimal));将导致错误@ runtime
"NotSupportedException was unhandled"
"Queries with local collections are not supported"堆栈:
at System.Data.Linq.SqlClient.SqlBinder.Visitor.ConvertToFetchedSequence(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitAlias(SqlAlias a)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource source)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(SqlSelect select)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitAlias(SqlAlias a)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource source)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(SqlSelect select)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlVisitor.VisitSequence(SqlSelect sel)
at System.Data.Linq.SqlClient.SqlVisitor.VisitExists(SqlSubSelect sqlExpr)
at System.Data.Linq.SqlClient.SqlVisitor.VisitSubSelect(SqlSubSelect ss)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSubSelect(SqlSubSelect ss)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitBinaryOperator(SqlBinary bo)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(SqlSelect select)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)我做错了什么?Google/Bing不会报告很多解决方案,但它看起来很简单。
这不是解决方案--它不起作用。同样的错误。
Working around LinqToSQls "queries with local collections are not supported" exception
发布于 2009-08-08 06:04:49
您的问题是,您正在尝试执行一个包含“动态”局部变量的SQL查询。事实是,linq2sql不能进行这样的查询:
select * from table
where id in (--list of ids here referenced from a local variable--)首先,您应该从db中的表中收集列表:
IQueryable<int> terminalID = db.terminals.where(p=>p.id<=5).select(x=>x.id);然后继续您的查询:
queryDataIDs.Where(q => q.DataEventKeyID == 2 && terminalID.Contains((int)q.ValueDecimal));希望能有所帮助
https://stackoverflow.com/questions/1240306
复制相似问题