Назначить нулевые (отсутствующие) значения при уменьшении доступа к разделу

Да - возьмите копию переменной внутри цикла:

while (variable < 5)
{
    int copy = variable;
    actions.Add(() => copy * 2);
    ++ variable;
}

Вы можете думать об этом, как если бы компилятор C # создавал «новую» локальную переменную каждый раз, когда он попадает в объявление переменной. На самом деле он создаст соответствующие новые объекты закрытия, и он становится сложным (с точки зрения реализации), если вы ссылаетесь на переменные в нескольких областях, но он работает:)

Обратите внимание, что более распространенное появление этого проблема заключается в использовании for или foreach:

for (int i=0; i < 10; i++) // Just one variable
foreach (string x in foo) // And again, despite how it reads out loud

Подробнее об этом см. в разделе 7.14.4.2 спецификации C # 3.0, а моя статья о замыканиях еще несколько примеров.

1
задан George Menoutis 13 July 2018 в 07:49
поделиться

1 ответ

Поскольку доступ к разделу работает через ассоциации в Qlik, это было бы невозможно с вашей текущей моделью данных. У Марии нет нулевой машины - у нее нет ассоциации с автомобилем (которая будет отображаться как нуль, если вы поместите ПОЛЬЗОВАТЕЛЬ и АВТОМОБИЛЬ в таблицу, но это тонкая разница). Если вы структурировали свои данные несколько иначе, вы могли бы заставить его работать с пустым ... что-то вроде

car:
LOAD * INLINE
[
CAR,USER
GETZ,George
];

outer join(car):
LOAD * INLINE
[
USER
George
Maria
];

Возможно, вам понадобится заполнить пустые значения пустым потом ...

car2:
NOCONCATENATE LOAD
if(isnull(CAR),'',CAR) as CAR,
USER
Resident car;

drop table car;

Если невозможно присоединиться к двум таблицам, вы можете добавить пустые записи в свой автомобильный стол?

car:
LOAD 
*,
USER as USER2 
INLINE
[
CAR,USER
GETZ,George
];

person:
LOAD * INLINE
[
USER
George
Maria
];

concatenate(car)
LOAD 
USER,
'' as CAR
RESIDENT person
WHERE NOT EXISTS (USER2,USER);

Есть также варианты с каким-то комбинированным ключом или applymaps потенциально, но мы надеемся, что одно из приведенных выше достаточно полезно ...

0
ответ дан x3ja 17 August 2018 в 13:24
поделиться
  • 1
    Ваш ответ, как правило, заключается в добавлении «фиктивной строки». в автомобильном столике. Мне это не нравится, он фальсифицирует данные (например: count (отдельный CAR) для Maria должен возвращать 0, а не 1). Другого пути нет? Правильно ли я считаю, что это серьезный надзор? – George Menoutis 13 July 2018 в 11:00
  • 2
    Это не надзор - это связано с ассоциацией - нет никакой ценности для CAR, связанной с Maria, поэтому вы не можете ссылаться на эти данные - будь то доступ к разделу или только в самой модели данных. То, о чем вы просите, это уметь связываться с Марией на основе ссылки, которая отсутствует в вашей модели данных, поэтому вам нужно как-то создать эту ссылку или найти другой способ сделать то, что вы хотите. Первый, который я предлагаю, действительно не подделка каких-либо данных - он не добавляет никаких строк - он просто заполняет таблицу нулевым или пустым для CAR путем объединения таблиц. Тем не менее, вторая делает новые строки. – x3ja 13 July 2018 в 16:24
  • 3
    – George Menoutis 29 August 2018 в 11:14
Другие вопросы по тегам:

Похожие вопросы: