Не поддерживается ошибка - PullRequest
2 голосов
/ 07 июня 2011

У меня есть метод, который принимает дату 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 может быть нулевым или пустым. Но я не могу исключить это в исходном запросе, потому что это:

var result = from items in MyAzureTable
             where items.Occured >= dtSince
             select items;

может вернуть более 1000 строк (что является пределом по умолчанию для таблиц Azure), и поэтому я не могу отфильтровать его с component позже. Если я сделаю что-то похожее на приведенное ниже, запись, которую я могу искать, находится в строке 1001. Таким образом, она не даст мне результат, который я ищу.

if (!String.IsNullOrEmpty(component))
{
    result = result.Where(x => x.Component == component).ToList<>();
}

Вопрос: Возможно ли иметь однострочный запрос linq, который может сначала проверить наличие непустой строки перед ее использованием в предложении where?

1 Ответ

1 голос
/ 07 июня 2011

Попробуйте это:

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