我有一个接受日期dtSince
和字符串component
作为参数的方法。我需要编写一行linq查询来搜索dtSince
之前发生的并且是组件component
(如果指定)的条目。我尝试过以下方法:
var result = from items in MyAzureTable
where items.Occured >= dtSince
&& items.Component == (component ?? items.Component)
select items;
但是我收到了NotSupported错误。我想items.Component == (component ?? items.Component)
就是问题所在。
如上所述,component
可以为null或为空。但我不能在原始查询中排除它,因为:
var result = from items in MyAzureTable
where items.Occured >= dtSince
select items;
可能会返回超过1000行(这似乎是Azure表的默认限制),因此我无法在以后使用component
对其进行过滤。如果我执行类似下面的操作,我可能要查找的条目位于第100行。因此,它不会给我我想要的结果。
if (!String.IsNullOrEmpty(component))
{
result = result.Where(x => x.Component == component).ToList<>();
}
问题:在where子句中使用它之前,是否可以先使用一行linq查询来检查非空字符串?
答案 0 :(得分:1)
试试这个:
var result = from items in MyAzureTable
where items.Occured >= dtSince &&
(component == null || items.Component == component)
select items;