Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法返回记录true或false或all_C#_Linq_Methods - Fatal编程技术网

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();
}