C# LINQ查询查找字符串包含任何字母的列

C# LINQ查询查找字符串包含任何字母的列,c#,linq,C#,Linq,我正在尝试使用LINQ查询查找所有状态为“a”且代码不包含任何字母的客户代码 var activeCustomers = Customers.Where(x => x.Status == "A" && x.Code.Any(n => !char.IsLetter(n))).Select(x => x.Code); 在LinqPad中运行此查询时,出现以下错误: 正如评论者所说,IsLetter()不能翻译成SQL。但是,您可以执行以下操作,首先从数据库中检索状

我正在尝试使用LINQ查询查找所有状态为“a”且代码不包含任何字母的客户代码

var activeCustomers = Customers.Where(x => x.Status == "A" && x.Code.Any(n => !char.IsLetter(n))).Select(x => x.Code);
在LinqPad中运行此查询时,出现以下错误:


正如评论者所说,IsLetter()不能翻译成SQL。但是,您可以执行以下操作,首先从数据库中检索状态为“A”的所有项目,然后在检索后应用您的条件:

var activeCustomers = Customers.Where(x => x.Status == "A").AsEnumerable().Where(x => x.Code.Any(n => !char.IsLetter(n))).Select(x => x.Code);
您必须确定(从性能角度)使用“a”检索所有客户,然后使用流程是否可以接受


AsEnumerable()
将LINQ查询转换为不使用
IQueryable
(可与SQL一起使用),而是使用用于普通LINQ对象的
IEnumerable

您需要将此作为两部分查询来执行。首先,您可以获得状态为“A”的所有用户:

在内存中存储这些内容后,可以为
char.IsDigit
创建一个附加过滤器:

var codes = activeCustomers.Where(x => x.Code.Any(n => !char.IsLetter(n)))
                           .Select(x => x.Code)
                           .ToArray();

因为它是LINQ 2 SQL,所以没有自然的方法将char.isleter转换为SQL可以理解的内容。您可以创建一个检索潜在候选对象的查询,然后应用内存中的附加筛选器。这也解决了Linq2SQL对字符串有偏好并且您正在处理字符的问题

var activeCustomers = Customers.Where(x => x.Status == "A").ToList();     
var filteredCustomers = activeCustomers.Where(x => 
    x.Code.Any(n => !char.IsLetter(n))).Select(x => x.Code).ToList();
这里有两个性能热门。首先,您正在检索所有可能的记录,这不太理想。其次,在上面的代码中,您只对可枚举的代码集合感兴趣,这意味着我们的查询包含的数据远远超过了我们最初想要的

您可以通过只返回应用筛选所需的列来收紧查询:

var activeCustomers = Customers.Where(x => x.Status == "A")
    Select(x => new Customer{ Status = x.Status, Code = x.Code }).ToList(); 

返回的集合仍然比需要的多,但查询包含的列更少。

您希望Linq 2 SQL如何转换char.isleter()?这是哪一个Linq?对SQL来说,
code
仅仅是字母和数字吗?如何将
TryParsing
转换为
int
?我正在使用LinqPad并连接到SQL服务器,我认为它是LINQ转换为SQL。@Ash
code
是数据库中的字符串或
varchar
var activeCustomers = Customers.Where(x => x.Status == "A")
    Select(x => new Customer{ Status = x.Status, Code = x.Code }).ToList();