LINQ to SQL查找以另一个表中的字符开头的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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查找以另一个表中的字符开头的值的主要内容,如果未能解决你的问题,请参考以下文章
带有 XML 数据库字段的 Linq-to-SQL —— 为啥会这样?
Linq To Sql进阶系列用object的动态查询与保存log篇