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
C# 带有if语句的Where子句_C#_Linq - Fatal编程技术网

C# 带有if语句的Where子句

C# 带有if语句的Where子句,c#,linq,C#,Linq,大家好,提前谢谢,我很难理解如何将where子句与需要执行的条件语句一起使用。我有两个信息网格,一个网格依赖于另一个网格来确定显示的内容。在第一个网格中,日期字段可以是日期,也可以是Never 第一个网格的数据如下所示: ID Date Title --- ----- ------ 12 Never Home 13 Never School 14 Never Work 第二个网格将仅显示三行中的一行,具体

大家好,提前谢谢,我很难理解如何将where子句与需要执行的条件语句一起使用。我有两个信息网格,一个网格依赖于另一个网格来确定显示的内容。在第一个网格中,日期字段可以是日期,也可以是Never

第一个网格的数据如下所示:

ID       Date     Title
---      -----    ------
12       Never    Home
13       Never    School
14       Never    Work
第二个网格将仅显示三行中的一行,具体取决于日期字段的值,在本例中应为:

ID       Date     Title
---      -----    ------
12       Never    Home 
这些信息被拉入一个列表中,我想使用LINQ对其进行迭代。我想要实现的是:

If(All Date values == 'Never') 
    Then pull the first one (12)
else
    if(Date has value)
         then pull the first that has a date

myList.Where(??what goes here??).Select(t => t).FirstOrDefault(); 

您可能正在寻找类似以下内容:

var record = myList.All(m => m.Date.Equals("Never")) 
               ? myList.FirstOrDefault() 
               : myList.FirstOrDefault(m => !m.Date.Equals("Never"));
return myList.All(x => x.Date == "Never") ? myList.FirstOrDefault() : myList.FirstOrDefault(x => x.Date != "Never");
有关
.All()
的更多信息,请查看


i、 e.第一个不等于never或null,如果为null,则仅为第一个(或null)。

由于您有两条规则,因此需要在某处使用if条件

我能想到的最简单的形式是这样的:

var record = myList.All(m => m.Date.Equals("Never")) 
               ? myList.FirstOrDefault() 
               : myList.FirstOrDefault(m => !m.Date.Equals("Never"));
return myList.All(x => x.Date == "Never") ? myList.FirstOrDefault() : myList.FirstOrDefault(x => x.Date != "Never");

更好的是,它只是为了一个更简单的答案而反向思考需求。这更好,因为它的迭代次数最少。我认为这和下面的答案都是最好的答案;然而,这正是我所需要的,谢谢大家!