C# 方法返回记录true或false或all
有没有更好的方法来编写下面的方法?我想返回基于C# 方法返回记录true或false或all,c#,linq,methods,C#,Linq,Methods,有没有更好的方法来编写下面的方法?我想返回基于bool变量IsPublished的内容 当IsPublished为null时,我希望返回true和false的条目 public IList<Content> GetContent(bool? IsPublished) { if (IsPublished != null) { return _UoW.Content.All.Where(c => c.IsPublished == IsPublishe
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();
}
}
public IList GetContent(bool?IsPublished)
{
如果(IsPublished!=null)
{
返回_UoW.Content.All.Where(c=>c.IsPublished==IsPublished.ToList();
}
其他的
{
return _UoW.Content.All.ToList();
}
}
如果您所说的更好是指更短,那么操作符?
可以是解决方案。此外,当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();
}
public IList GetContent(bool?IsPublished)
{
返回isPublished!=null?\u UoW.Content.All.Where(c=>c.isPublished==isPublished.ToList():\u UoW.Content.All.ToList();
}
这不是很有效,而是很紧凑:
public IList GetContent(bool?IsPublished)
=>_UoW.Content.All.Where(c=>!IsPublished.HasValue | | c.IsPublished==IsPublished.ToList();
您可以在
x.IsPublished==(v??x.IsPublished)
公共A类
{
公共int Id{get;set;}
public可为null的IsPublished{get;set;}
}
公共静态IEnumerable筛选器(IEnumerable项,可为null的v)
{
返回项。其中(x=>x.IsPublished==(v??x.IsPublished)).ToList();
}
var listy=新列表();
Add(新的A(){Id=1,IsPublished=null});
Add(新的A(){Id=2,IsPublished=true});
Add(新的A(){Id=3,IsPublished=false});
Add(新的A(){Id=4,IsPublished=null});
Add(新的A(){Id=5,IsPublished=true});
Add(新的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 } }
>过滤器(列表,空)
列表(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}
>过滤器(listy,true)
列表(2){提交{0.A{Id=2,IsPublished=true},提交{0.A{Id=5,IsPublished=true}}
>过滤器(列表,错误)
列表(2){提交{0.A{Id=3,IsPublished=false},提交{0.A{Id=6,IsPublished=false}
(上面的类是
A
而不是Content
,方法是Filter
而不是GetContent
)如果你试图简洁,你不需要为单个语句If
主体使用{/code>块
但是,也许您正在寻找的是一个单一的返回点:
public IList<Content> GetContent(bool? IsPublished) {
var ans = _UoW.Content.All;
if (IsPublished.HasValue)
ans = ans.Where(c => c.IsPublished == IsPublished);
return ans.ToList();
}
public IList GetContent(bool?IsPublished){
var ans=_UoW.Content.All;
if(IsPublished.HasValue)
ans=ans.Where(c=>c.IsPublished==IsPublished);
返回ans.ToList();
}
(假设All
的类型与Where
的返回类型兼容。如果不兼容,可以将赋值更改为var ans=_UoW.Content.All.Where(c=>true)
)类似_UoW.Content.All.Where(c=>!IsPublished.HasValue | c.IsPublished==IsPublished.Value.ToList())代码>在哪方面更好?请注意,您有一个输入错误-您的Where
子句应该是=
,而不是=
@JamesThorpe,这样我就不必使用if语句-也许hesam已经解决了它?正如@FurkanKambay所说的,如果它为null,您根本不想运行过滤器,那么我会说它是好的(或者是建议的三元)-在null
情况下,冗余位置的是否会得到优化,目的就更清楚了-当null
时,没有过滤。我个人会坚持使用if语句。我几乎总是看重可读性而不是简洁性。老实说,我本可以选择任何一个答案,但这一个更具可读性。
> 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 } }
public IList<Content> GetContent(bool? IsPublished) {
var ans = _UoW.Content.All;
if (IsPublished.HasValue)
ans = ans.Where(c => c.IsPublished == IsPublished);
return ans.ToList();
}