我想从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。