PowerShell функционирует поведение возврата

LINQ поддерживает два поведения выполнения: отложенное выполнение и немедленное выполнение. Отложенное выполнение означает, что оценка выражения задерживается до тех пор, пока его фактическое значение фактически не требуется. Это значительно повышает производительность, избегая ненужного выполнения.

Отложенное выполнение применимо к любой коллекции в памяти, а также к удаленным поставщикам LINQ, таким как LINQ-to-SQL, LINQ-to-Entities, LINQ-to-XML и т. Д.

В представленном рассматриваемом примере кажется, что запрос выполнен на where, но на самом деле этого не происходит. Запрос выполняется при вызове .FirstAsync(). Это означает, что вам действительно нужны данные, а C # выполняет запрос, извлекает данные и сохраняет данные в памяти.

Если вы хотите немедленного поведения при выполнении, вы можете использовать .ToList(), он извлечет все спроецированные данные и сохранит их в памяти.

var result =(from tkn in Db.Set()
            where tkn.IsActive == true
            & tkn.Token == token
            select tkn.RelatedObjectMappedToTableB).ToList();

Подробнее см. в статье

.

17
задан Goyuix 29 September 2008 в 15:30
поделиться

3 ответа

Когда PowerShell видит маркер Return-True, он идентифицирует его как команду и до оценки или конца оператора, все остальное - аргумент, который передается функции Return-True.

Вы видите это в действии, если Вы делаете:

PS > function Return-True { "The arguments are: $args"; return $true }
PS > Return-True -eq $false
The arguments are: -eq False
True

Вот почему все следующее возвращает 'True', потому что все, что Вы видите, является результатом вызова Return-True с различными аргументами:

PS > Return-True -eq $false
True
PS > Return-True -ne $false
True
PS > Return-True -eq $true
True
PS > Return-True -ne $true
True

Используя (Return-True) силы PowerShell для оценки функции (без аргументов).

34
ответ дан 30 November 2019 в 11:13
поделиться

Вторая строка не делает булевой оценки. Посмотрите на то, что происходит, если Вы делаете то же самое со строками.

PS C:\> function Return-True { return "True string" }
PS C:\> Return-True
True string
PS C:\> Return-True -eq "False string"
True string
PS C:\> (Return-True) -eq "False string"
False

вторая строка просто возвращает значение функции и не делает сравнение. Я не уверен точно, почему это поведение происходит, но оно делает поведение легче видеть чем тогда, когда с помощью булевых значений, которые преобразовываются в строки, "Верные" и "Ложные".

5
ответ дан 30 November 2019 в 11:13
поделиться

Если вы используете PowerShell V2 редактор, вы бы увидели, что -eq в первом примере синего цвета, потому что это аргумент и -eq во втором примере серого цвета, потому что это оператор

Также в V2 вы можете строго относиться к аргументам с помощью CmdletBinding и param

function Return-True
{
    [CmdletBinding()]
    param()
    return $true
}
Return-True -eq $false

Return-True -eq $false
Return-True : A parameter cannot be found that matches parameter name 'eq'.
At line:7 char:16
+ Return-True -eq <<<<  $false
    + CategoryInfo          : InvalidArgument: (:) [Return-True], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Return-True
4
ответ дан 30 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

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