Linq中用Contain时,传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。

百思软件工作室 2010-11-02 04:16:39
Linq中用Contain时,传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。
我的代码:
r = dc.A.Where(m => m.Status == (int)iTry86.Model.ChinaStock.TransactStatus.Normal &&
idList.Contains(m.AccountID.Trim()) && m.CreateTime <= endTime)
.GroupBy(m => m.AccountID)
.Select(t => new model.KeyMoney() { key = iTry86.Tools.Account.GeKeyID(t.Key), profit = t.Sum(a => a.Profit) })
.ToList();
因为idList数组中的数量达到6000多,远远大于2100。
因为多出用到了数据库,修改数据库的字段肯定不行。
因此我想求一个较理想的解决方案,希望高手指点。
谢谢
...全文
2195 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
光脚丫思考 2010-11-03
  • 打赏
  • 举报
回复
你的问题不是你不会使用LINQ中的in语句,而是你传递给in语句的参数太多了。
长度可能超过2100个,甚至上万。这多恐怖呀?要知道这些内容最后就会包含在所生成的SQL语句中。
这参数也确实太长太长了。
传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。
从这个异常信息就可以知道这不是LINQ的问题。
解决办法很简单,只要将调用数据源的AsEnumerable()运算符就可以了。如下面的代码:

NorthwindDataContext db = new NorthwindDataContext(@"C:\LINQ\Northwind.mdf");

string[] CustomerIDs = { "ALFKI", "ANATR", "ANTON" };

var PartialCustomers =
from CustomerObject in db.Customers.AsEnumerable()
where CustomerIDs.Contains(CustomerObject.CustomerID)
select CustomerObject;

foreach (var CustomerObject in PartialCustomers)
{
Console.WriteLine(CustomerObject.CustomerID);
}

上面的代码指定的数据源是db.Customers.AsEnumerable()。
混乱之序 2010-11-02
  • 打赏
  • 举报
回复
Lambda表达式 新技术 还没机会用呢
改天 一定好好研究学下
支持下
claymore1114 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sclsuccess2010 的回复:]

引用 8 楼 claymore1114 的回复:
int[] idList= db.tb.Select(x => x.Id).ToArray(); //这样数组也没有大小限制吧

这是Linq对Contains方法的使用限制
[/Quote]
不可能吧,兄弟 举个例子
sclsuccess2010 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q107770540 的回复:]
这是.net是一个BUG
[/Quote]
改过来了还是没用啊
这个跟.NET没关系把
是Linq对Contain方法的限制
sclsuccess2010 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 claymore1114 的回复:]
int[] idList= db.tb.Select(x => x.Id).ToArray(); //这样数组也没有大小限制吧
[/Quote]
这是Linq对Contains方法的使用限制
claymore1114 2010-11-02
  • 打赏
  • 举报
回复
int[] idList= db.tb.Select(x => x.Id).ToArray(); //这样数组也没有大小限制吧
claymore1114 2010-11-02
  • 打赏
  • 举报
回复
是 数组idList的长度有 限制了?
还是 你的url 参数限制了?
idList数组 和 url参数 有啥关系?
claymore1114 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sclsuccess2010 的回复:]

引用 1 楼 claymore1114 的回复:
没看明白

A.Contains()
规定A数组的长度不能超过2100个
[/Quote]
不是吧,数组本来是可以无限大的,那lz 分批 处理?
q107770540 2010-11-02
  • 打赏
  • 举报
回复
这是.net是一个BUG
q107770540 2010-11-02
  • 打赏
  • 举报
回复
如果你 是这样得到的:
int[] idList= db.tb.Select(x => x.Id).ToArray();

修改成这样:
var idList=db.tb.Select(x => x.Id);即可
q107770540 2010-11-02
  • 打赏
  • 举报
回复
idList是如何得到的?
sclsuccess2010 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 claymore1114 的回复:]
没看明白
[/Quote]
A.Contains()
规定A数组的长度不能超过2100个

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧