我试图找到所有客户代码,其中客户的状态为" A"并且其代码不包含使用LINQ查询的任何字母。
var activeCustomers = Customers.Where(x => x.Status == "A" && x.Code.Any(n => !char.IsLetter(n))).Select(x => x.Code);
当我在LinqPad中运行此查询时,出现以下错误:
答案 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();
您仍然会返回比您需要的更多的设置,但您的查询包含的列数较少。