基于 if 语句的 linq 列表中的 C# 返回值

本文关键字:返回值 列表 linq if 语句 基于 | 更新日期: 2023-09-27 17:57:10

我有什么

我有一个列表,只有在满足某些条件时才会执行

var list = data.Where(!t.Area.HasValue || t => t.Area == response.Area).Select(t => new Status()
{
   PK = t.PK,
   Area = t.Area,
   Description = t.Description
   //other stuff
}).ToList();

我想要什么

这个列表的工作方式很好,但现在我想稍微修改一下。对于其中一个变量,我想运行一个 if-else 语句,该变量将是 if-else 语句执行的返回结果

var list = data.Where(!t.Area.HasValue || t => t.Area == response.Area).Select(t => new Status()
{
   PK = t.PK,
   Area = t.Area,
   Description,    //<---------------returns the value of executed if-else statement
                                         //if (t.Area.HasValue) Description = a;
                                         //else Description = b;
   OtherStuff = t.OtherStuff
}).ToList();

我的问题是:我在哪里放置 if-else 条件才能正确执行它?

我尝试了什么

我尝试将 if-else 语句放在两个逗号之间的实际变量位置。

我尝试使用临时变量,其结果将被返回,但我不想在我的列表中包含这个临时变量。

我尝试在 Where() 中使用额外的条件,然后才意识到这是实际执行该列表的一组条件。

搜索

SO 和互联网并没有让我尝试获得想要的结果(希望我不只是使用了错误的搜索条件)。

基于 if 语句的 linq 列表中的 C# 返回值

您可以通过以下方式使用三元运算符:

Area = t.Area,
Description = t.Area.HasValue ? a : b, 
var list = data.Where(!t.Area.HasValue || t => t.Area == response.Area).Select(t => new Status()
{
   PK = t.PK,
   Area = t.Area,
   Description = t.Area.HasValue ? a : b, 
   OtherStuff = t.OtherStuff
}).ToList();
var list = data.Where(!t.Area.HasValue || t => t.Area == response.Area).Select(t => new Status()
{
   PK = t.PK,
   Area = t.Area,
   Description = t.Area.HasValue ? a : b
   //other stuff
}).ToList();