C# LINQ查询查找字符串包含任何字母的列
我正在尝试使用LINQ查询查找所有状态为“a”且代码不包含任何字母的客户代码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。但是,您可以执行以下操作,首先从数据库中检索状
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。@Ashcode
是数据库中的字符串或varchar
。
var activeCustomers = Customers.Where(x => x.Status == "A")
Select(x => new Customer{ Status = x.Status, Code = x.Code }).ToList();