有没有更好的方法来编写下面的方法?我想根据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();
}
}
答案 0 :(得分:0)
如果更好,则意味着更短,运营商?
可以成为解决方案。此外,isPublished == null
时使用过滤器毫无意义。有关?
运营商的信息,请参阅Microsoft文档here。
public IList<Content> GetContent(bool? IsPublished)
{
return isPublished != null ? _UoW.Content.All.Where(c=>c.IsPublished== IsPublished).ToList() : _UoW.Content.All.ToList();
}
答案 1 :(得分:0)
效率不高,但 紧凑:
public IList<Content> GetContent(bool? IsPublished)
=> _UoW.Content.All.Where(c => !IsPublished.HasValue || c.IsPublished == IsPublished).ToList();
答案 2 :(得分:0)
您可以使用null coalesce operator ??
并过滤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
)
答案 3 :(得分:0)
如果您想要简短,那么对于单个声明{
}
正文,您不需要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)
。)