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

3

我的要求

我有一个列表,只有在满足特定条件时才会执行。

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和互联网没有得到我所期望的结果(希望我没有使用错误的搜索条件)。
3个回答

2
您可以使用三元运算符来实现这一点,如下所示:
Area = t.Area,
Description = t.Area.HasValue ? a : b, 

但是我是赢家:D - Ehsan Sajjad
哇,我离开了5分钟 O_O - Vadzim Savenok
1
既然它们都是一样的,我将使用我的小RNG代码来确定获胜者,这样你们所有人都处于同样公平的条件下 =) - Vadzim Savenok
但是作为奖励,给你们所有人加上1 =) - Vadzim Savenok
@VadzimSavenok RNG 的意思是什么? - Ehsan Sajjad
显示剩余6条评论

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

谢谢你 =) 但是随机数生成器偏向了他。让他享受一下初学者的好运吧! =) - Vadzim Savenok

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

恭喜你,你是我小小的随机数代码的赢家!看起来你还需要升级一下 ;) - Vadzim Savenok
谢谢!我们同时发布了相同的答案,这很有趣。 - Josh K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接