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来确定包含参数是否在开头出现,而不是StartsWithIndexOf

.Any(p => item.Surname.IndexOf(p) == 0)

根据MSDN:

的IndexOf(T):

项目索引如果在列表中找到;否则,-1。

这个答案部分取自here

以上是关于LINQ to SQL查找以另一个表中的字符开头的值的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL 执行联合和左外连接

如果行以另一个字符串开头,则替换文件中的字符串

带有 XML 数据库字段的 Linq-to-SQL —— 为啥会这样?

Linq To Sql进阶系列用object的动态查询与保存log篇

Linq to SQL 选择 DateTime 字段在任何日期范围列表中的行

Linq to SQL - 如何将数字作为字符串排序?