Метод для возврата записей true false или all - PullRequest
0 голосов
/ 08 мая 2018

Есть ли лучший способ написать метод ниже? Я хочу вернуть содержимое на основе bool переменной IsPublished.

Когда IsPublished равно null Я хочу вернуть записи, которые являются true и false.

public IList<Content> GetContent(bool? IsPublished)
{
    if (IsPublished != null)
    {
        return _UoW.Content.All.Where(c => c.IsPublished == IsPublished).ToList();
    }
    else
    {
        return _UoW.Content.All.ToList();
    }
}

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Если вы хотите быть кратким, вам не нужны блоки { } для одного оператора if else тел.

Но, возможно, вам нужна единственная точка возврата:

public IList<Content> GetContent(bool? IsPublished) {
    var ans = _UoW.Content.All;
    if (IsPublished.HasValue)
        ans = ans.Where(c => c.IsPublished == IsPublished);

    return ans.ToList();
}

(Предполагая, что тип All совместим с типом возврата Where. Если нет, вы можете изменить присвоение на var ans = _UoW.Content.All.Where(c => true).)

0 голосов
/ 08 мая 2018

Это не так эффективно, но является компактным:

public IList<Content> GetContent(bool? IsPublished)
    => _UoW.Content.All.Where(c => !IsPublished.HasValue || c.IsPublished == IsPublished).ToList();
0 голосов
/ 08 мая 2018


Вы можете использовать пустой оператор coalesce ?? и фильтровать по x.IsPublished == (v ?? x.IsPublished)

public class A
{
    public int Id { get; set; }
    public Nullable<bool> IsPublished { get; set; }
}

public static IEnumerable<A> Filter(IEnumerable<A> items, Nullable<bool> v)
{
    return items.Where(x => x.IsPublished == (v ?? x.IsPublished)).ToList();
}

var listy = new List<A>();
listy.Add(new A() { Id=1, IsPublished=null });
listy.Add(new A() { Id=2, IsPublished=true });
listy.Add(new A() { Id=3, IsPublished=false });
listy.Add(new A() { Id=4, IsPublished=null });
listy.Add(new A() { Id=5, IsPublished=true });
listy.Add(new A() { Id=6, IsPublished=false });

Демонстрация интерактивной консоли C #:

> Filter(listy, null)
List<Submission#0.A>(6) { Submission#0.A { Id=1, IsPublished=null }, Submission#0.A { Id=2, IsPublished=true }, Submission#0.A { Id=3, IsPublished=false }, Submission#0.A { Id=4, IsPublished=null }, Submission#0.A { Id=5, IsPublished=true }, Submission#0.A { Id=6, IsPublished=false } }
> Filter(listy, true)
List<Submission#0.A>(2) { Submission#0.A { Id=2, IsPublished=true }, Submission#0.A { Id=5, IsPublished=true } }
> Filter(listy, false)
List<Submission#0.A>(2) { Submission#0.A { Id=3, IsPublished=false }, Submission#0.A { Id=6, IsPublished=false } }  

(класс выше A вместо Content и метод Filter вместо GetContent)

0 голосов
/ 08 мая 2018

Если лучше, вы имеете в виду короче, оператор ? может быть решением. Также нет смысла использовать фильтр, когда isPublished == null. Пожалуйста, обратитесь к документации Microsoft здесь для оператора ?.

public IList<Content> GetContent(bool? IsPublished)
{
    return isPublished != null ? _UoW.Content.All.Where(c=>c.IsPublished== IsPublished).ToList() : _UoW.Content.All.ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...