Episerver пустой атрибут

Я пытаюсь выполнить поиск среди всех пользователей сообщества, чтобы получить список людей, у которых нет настраиваемого атрибута.

Используя запрос StringCriterion, есть ли способ сопоставления с нулем, а не со значением?

Я попробовал следующий код, но он не работает.

    private static UserCollection GetAllUsersWithNoCode()
    {
        UserQuery query = new UserQuery();
        StringCriterion criterion = new StringCriterion();
        criterion.Value = null;
        query[AttributeNames.CommunityUser.AUTO_LOGIN_TOKEN] = criterion;
        return CommunitySystem.CurrentContext.DefaultSecurity.GetQueryResult(query);
    }

Заранее спасибо всем, кто может помочь...

2 ответа

Решение

Только что получил ответ от поддержки Episerver. Они утверждают, что таким способом невозможно запросить пользовательские атрибуты. Решение состоит в том, чтобы вручную добавить строки в БД (для всех пользователей) с пустыми строками, а затем использовать значение string.empty для поиска результатов.

Не совсем тот ответ, на который я надеялся, но позже я опробую и обновлю результаты...

Я вижу, что это уже решено, но есть способ проверить нулевые значения. Вы можете проверить нулевое значение, используя что-то вроде этого, я не уверен, сработает ли это, если атрибут не создан для конкретного объекта (объектов): рассмотрите этот псевдокод, я не проверял, будет ли это компилироваться.

public class NullStringCriterion : StringCriterion
{
    public override string GetQuery(string propertyName)
    {
        return String.Format(" ({0} IS NULL) ", propertyName);
    }
}

а потом:

private static UserCollection GetAllUsersWithNoCode()
{
    UserQuery query = new UserQuery();
    query[AttributeNames.CommunityUser.AUTO_LOGIN_TOKEN] = new NullStringCriterion();
    return CommunitySystem.CurrentContext.DefaultSecurity.GetQueryResult(query);
}
Другие вопросы по тегам