Почему Expression.And представляет "&", но не "&&"


У меня есть следующий класс:

public class Test
{
    public string Text { get; set; }
    public int Number { get; set; }
}

И я создаю дерево Expression типа Expression> на этом классе. Когда я делаю это следующим образом:

Expression<Func<Test, bool>> predicate1 = x => x.Text.Length > 5 && x.Number > 0;

Я получаю следующее отладочное представление:

.Lambda #Lambda1<System.Func`2[NHLinqTest.Test,System.Boolean]>(NHLinqTest.Test $x) {
    ($x.Text).Length > 5 && $x.Number > 0
}

примечание: есть && для and-операции.
Когда я делаю это так:

    var y = Expression.Parameter(typeof(Test));

    var predicate2 = Expression.And(
        Expression.GreaterThan(
            Expression.Property(Expression.Property(y, "Text"), "Length"),
            Expression.Constant(5)),
    Expression.GreaterThan(
        Expression.Property(y, "Number"),
            Expression.Constant(0)));

я получаю следующее отладочное представление:

($var1.Text).Length > 5 & $var1.Number > 0

обратите внимание: есть & для and-operation. Почему во втором случае я получаю &? Как модифицировать predicate2, чтобы получить && вместо &?
. Заранее спасибо!

6
задан Rup 18 January 2011 в 11:58
поделиться