.net mvc - как сделать параметр метода класса (IQueryable) обнуляемым - PullRequest
0 голосов
/ 11 января 2019

У меня есть метод класса, который получает запрашиваемый параметр:

public IQueryable<Company> getEmpresasVisiblesUsuario(IQueryable<Company> companies, bool onlyActive = true)
{
    /*
    if (companies == null) {
        companies = db.companies;
    }
    */

    int userId = HttpContext.Current.User.Identity.GetUserId<int>();
    companies = companies.Where(s => s.id_user == userId);

    if (onlyActive) {
        companies = companies.Where(e => e.active);
    }   
    return companies;
}

Это работает нормально, но теперь мне нужно, чтобы параметр 'companies' был необязательным ... как я могу это сделать? Я пытался с IQueryable? компании, но это дает ошибку:

the type IQueryable<Company> must be a non-nullable value type in order to use it as a parameter 'T' in the generic type or method 'Nullable<T>'

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Предоставить параметру компании значение по умолчанию (т. Е. Ноль)

public IQueryable<Company> getEmpresasVisiblesUsuario(IQueryable<Company> companies = null, bool onlyActive = true)

тогда ваш метод можно вызвать следующим образом

getEmpresasVisiblesUsuario(companies, false);
getEmpresasVisiblesUsuario(companies);
getEmpresasVisiblesUsuario(onlyActive: false);
0 голосов
/ 11 января 2019

Вы можете перегрузить ваш метод так:

public IQueryable<Company> getEmpresasVisiblesUsuario(bool onlyActive = true)
{
     return getEmpresasVisiblesUsuario(db.companies, onlyActive);
}

public IQueryable<Company> getEmpresasVisiblesUsuario(IQueryable<Company> companies, bool onlyActive = true)
{
    int userId = HttpContext.Current.User.Identity.GetUserId<int>();
    companies = companies.Where(s => s.id_user == userId);

    if (onlyActive) {
        companies = companies.Where(e => e.active);
    }   
    return companies;
}
0 голосов
/ 11 января 2019

Эм, просто добавьте ноль к параметру:

public IQueryable<Company> getEmpresasVisiblesUsuario(IQueryable<Company> companies = null, bool onlyActive = true)
...