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

时间:2015-05-18 13:14:14

标签: c# linq

我试图找到所有客户代码,其中客户的状态为" A"并且其代码不包含使用LINQ查询的任何字母。

var activeCustomers = Customers.Where(x => x.Status == "A" && x.Code.Any(n => !char.IsLetter(n))).Select(x => x.Code);

当我在LinqPad中运行此查询时,出现以下错误:

enter image description here

3 个答案:

答案 0 :(得分:3)

正如评论者所说,IsLetter()无法转换为SQL。但是,您可以执行以下操作,这将首先检索状态为&#34; A&#34;的所有项目。从数据库中,然后将<=> 检索后>应用您的标准

var activeCustomers = Customers.Where(x => x.Status == "A").AsEnumerable().Where(x => x.Code.Any(n => !char.IsLetter(n))).Select(x => x.Code);

您必须确定是否可接受(从性能角度来看)使用&#34; A&#34;然后处理。

AsEnumerable()将您的LINQ查询转换为不使用IQueryable(适用于SQL),而使用IEnumerable,它用于对象的纯LINQ。

答案 1 :(得分:3)

您需要将此作为两部分查询。首先,您可以获得所有用户的状态是&#34; A&#34;:

remainingquantity=totalquantity-quantityorded and reorderlevel=remainingquantity-quantityordered

在您获得内存后,您可以为var activeCustomers = Customers.Where(x => x.Status == "A").ToList(); 创建额外的过滤器:

char.IsDigit

答案 2 :(得分:2)

由于它是LINQ 2 SQL,因此没有将char.IsLetter转换为SQL可以理解的东西的自然方法。您可以为检索潜在候选项的查询提供水合,然后应用添加的内存中过滤器。这也解决了LINQ 2 SQL首选字符串而你正在处理字符

的问题
if($('#myDiv').css('visibility') == 'hidden'){
    $('#myDiv').css('visibility', 'visible');
    $('#myDiv').slideDown('slow');
}

这里有两个性能点击。首先,您要检索所有潜在的记录,这些记录并不合适。其次,在上面的代码中,您只对可枚举的代码集感兴趣,这意味着我们的查询包含的数据远远超出了我们原先想要的数据。

您可以通过仅返回应用过滤所需的列来收紧查询:

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();

您仍然会返回比您需要的更多的设置,但您的查询包含的列数较少。