Linq To Sql Contains 参数数量最大不能超过 2100 怎么解决?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linq To Sql Contains 参数数量最大不能超过 2100 怎么解决?相关的知识,希望对你有一定的参考价值。
var names = dataLst.Select(item => item.Name);
var count = db.InvoiceContracts.Where(item => names.Contains(item.Name)).Count();
dataLst 是本地生成的一个结果集.所以不能用join来联合。
将
var names = dataLst.Select(item => item.Name);
改为
var names = dataLst.Select(item => item.Name).AsEnumerable();
的方法是不行的.
希望有大虾 提供有效的解决方案.
---------
你根本不是级联的问题,而是要保持Contains方法功能的特殊性,它有模糊匹配的功能!
------
第一种方式:轻装上阵,小集合拼合!
var names = dataLst.Select(item => item.Name).Skip(1000).Take(1000);
一千一次
形成多集合合并
do while--1000条目累加一次!
cs+=db.InvoiceContracts.Where(item => names.Contains(item.Name)).Count()
-----
第二种:采用原始sql,这个比较实在。速度也较为理想。
第三种:
int csum=zero;// int csum=0;
foreach (var item in names)
csum+= (from c in db.InvoiceContracts
where SqlMethods.Like(c.Name, "%"+item+"%")
select c).Count();
-----------------
因为本人写的东西说代码不是代码也不能运行,说伪码还有代码,应该一看就明白。可能不能运行,自己多调试,思路都有了!追问
高手帮帮忙!
rs = from item in rs
join ci in db.CustomerInfos
on item.Signer equals ci.User
where ci.Type == query.CustomerType//定值
select item;
这样设置关联的话 当customer表中存在 相同user的两条记录的时候
我的结果集 就会多出一条重复的记录..因为这个生成的 INNER JOIN
怎么样去写 才能避免这种情况啊?
我不需要Customer里的任何数据.只是用它做中转 来设置查询条件.
第一:除重。
(from item in rs
join ci in db.CustomerInfos
on item.Signer equals ci.User
where ci.Type == query.CustomerType//定值
select item).Distinct();
第二:过滤
对条件进行过滤,只取其一即可!
第三:即使重复
那是否影响最终结果集呢,不影响重复就重复呗!
LINQ to SQL查找以另一个表中的字符开头的值
我想从SQL表中检索值列表,其中记录以另一个表中定义的前缀开头。
This post给出了一个准确的答案,但它适用于EF而不是Linq to SQL。使用SQL我收到一个错误:
String.Contains方法仅支持可在客户端上计算的参数
示例代码:
var lookupList = dc.LookupTable.Select(p => p.Prefix);
var q = dc.Personnel
.Where(item => lookupList
.Any(p => item.Surname.StartsWith(p))).Select(x => x.PersonID);
这适用于EF。是的,我可以ToList()我的集合,但表很大,查询变得非常慢。有关如何使其工作而不枚举我的对象的任何建议?
这部分:.Any(p => item.Surname.StartsWith(p))
给出错误:
String.Contains方法仅支持可在客户端上计算的参数
它告诉您Contains
方法不能使用给定的参数,该参数只能在服务器上进行评估。 StartsWith
基本上使用相同的机制。因此,您应该使用Contains
来确定包含参数是否在开头出现,而不是StartsWith
或IndexOf
:
.Any(p => item.Surname.IndexOf(p) == 0)
根据MSDN:
的IndexOf(T):
项目索引如果在列表中找到;否则,-1。
这个答案部分取自here。
以上是关于Linq To Sql Contains 参数数量最大不能超过 2100 怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章
LINQ体验——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
LINQ to SQL语句之Exists/In/Any/All/Contains