LINQ to SQL查找以另一个表中的字符开头的值

问题描述 投票:1回答:1

我想从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()我的集合,但表很大,查询变得非常慢。有关如何使其工作而不枚举我的对象的任何建议?

c# linq linq-to-sql
1个回答
1
投票

这部分:.Any(p => item.Surname.StartsWith(p))给出错误:

String.Contains方法仅支持可在客户端上计算的参数

它告诉您Contains方法不能使用给定的参数,该参数只能在服务器上进行评估。 StartsWith基本上使用相同的机制。因此,您应该使用Contains来确定包含参数是否在开头出现,而不是StartsWithIndexOf

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

根据MSDN:

的IndexOf(T):

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

这个答案部分取自here

© www.soinside.com 2019 - 2024. All rights reserved.