首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq2Sql ->根据值的本地集合搜索数据库-“不支持本地集合的查询”

Linq2Sql ->根据值的本地集合搜索数据库-“不支持本地集合的查询”
EN

Stack Overflow用户
提问于 2009-08-06 17:26:58
回答 4查看 1K关注 0票数 2

我和Linq2SQL碰壁了。我喜欢它,它的灵活性令人惊叹,但我遇到了一些有趣的问题。我希望这只是我对它缺乏了解,而这真的有一个解决方案。举个例子。如下所示的linq2sql查询:

//一些本地的ids集合

代码语言:javascript
复制
var terminalID = new List<int>(){1, 2, 3, 4, 5};

// Linq语句的一部分:

代码语言:javascript
复制
queryDataIDs.Where(q => q.DataEventKeyID == 2 && terminalID.Contains((int)q.ValueDecimal));

将导致错误@ runtime

代码语言:javascript
复制
"NotSupportedException was unhandled"
"Queries with local collections are not supported"

堆栈:

代码语言:javascript
复制
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

EN

Stack Overflow用户

发布于 2009-08-08 06:04:49

您的问题是,您正在尝试执行一个包含“动态”局部变量的SQL查询。事实是,linq2sql不能进行这样的查询:

代码语言:javascript
复制
select * from table
where id in (--list of ids here referenced from a local variable--)

首先,您应该从db中的表中收集列表:

代码语言:javascript
复制
IQueryable<int> terminalID = db.terminals.where(p=>p.id<=5).select(x=>x.id);

然后继续您的查询:

代码语言:javascript
复制
queryDataIDs.Where(q => q.DataEventKeyID == 2 && terminalID.Contains((int)q.ValueDecimal));

希望能有所帮助

票数 -1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1240306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档