C# 带有if语句的Where子句
大家好,提前谢谢,我很难理解如何将where子句与需要执行的条件语句一起使用。我有两个信息网格,一个网格依赖于另一个网格来确定显示的内容。在第一个网格中,日期字段可以是日期,也可以是Never 第一个网格的数据如下所示:C# 带有if语句的Where子句,c#,linq,C#,Linq,大家好,提前谢谢,我很难理解如何将where子句与需要执行的条件语句一起使用。我有两个信息网格,一个网格依赖于另一个网格来确定显示的内容。在第一个网格中,日期字段可以是日期,也可以是Never 第一个网格的数据如下所示: ID Date Title --- ----- ------ 12 Never Home 13 Never School 14 Never Work 第二个网格将仅显示三行中的一行,具体
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");
更好的是,它只是为了一个更简单的答案而反向思考需求。这更好,因为它的迭代次数最少。我认为这和下面的答案都是最好的答案;然而,这正是我所需要的,谢谢大家!