不支持错误

时间:2011-06-07 06:39:51

标签: c# linq linq-to-entities azure azure-table-storage

我有一个接受日期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查询来检查非空字符串?

1 个答案:

答案 0 :(得分:1)

试试这个:

var result = from items in MyAzureTable
             where items.Occured >= dtSince && 
                   (component == null || items.Component == component)
             select items;