Есть ли способ ввести переменную (параметр) в свойстве? - PullRequest
1 голос
/ 01 апреля 2020

Я хотел бы задать условия для включенного свойства C #.

public IEnumerable<Order> Orders
{
    get
        {
            return context.Orders
                .Include("Member") //Member member
                .Include("OrderProducts"); //List<OrderProduct> OrderProducts
        }
}

Этот код, использующий инфраструктуру сущностей, фактически сопоставил все заказы в базе данных с сущностью. и таблица Member, на которую есть ссылка в таблице Order, и база данных OrderProduct, включенная в заказ, были собраны сразу.

Но так как этот код собирает все базы данных Order, я хочу отфильтровать их, задав им условие.

Конечно, создание метода было бы очень простым, но мне интересно, возможно ли это в свойстве. Можно ли указать условия через параметры для свойства?

Ответы [ 2 ]

4 голосов
/ 01 апреля 2020

Свойство является просто синтактическим c сахаром для упрощения чтения и записи базовых c методов. Это означает, что когда все это скомпилировано, оно становится парой методов.

Например, это:

public int Age { get; set; }

.. компилируется в (что-то похожее) в это:

private int _age;

public void set_Age(int age) {
    _age = age;
}

public int get_Age() {
    return _age;
}

На ваш конкретный c вопрос ... нет. Вы не можете передать параметры свойству.

Сказав это ... вы возвращаете IEnumerable<>, и коллекции EF будут счастливо играть с отложенным выполнением. Таким образом, вы можете «фильтровать» вещи в месте вызова, и оно должно быть преобразовано в соответствующий SQL:

yourObject.Orders.Where(x => x.Property == "Whatever").ToList();
3 голосов
/ 01 апреля 2020

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

public IEnumerable<Order> GetFilteredOrders(Condition condition)
{
    // do filtering with condition
}

Конечно, вы можете придерживаться использования свойства, например

private Condition _condition;

public IEnumerable<Order> FilteredOrders => Orders.Where(/* satisfies the _condition */);

И прежде чем вызывать это свойство , вы должны установить _condition вручную, как

_condition = // something you want to filter

Излишне говорить, что я бы лучше определил новый метод.

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