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# 如何在LINQ和C中使用if条件#_C#_Linq - Fatal编程技术网

C# 如何在LINQ和C中使用if条件#

C# 如何在LINQ和C中使用if条件#,c#,linq,C#,Linq,我想显示一个变量的值,该变量的值依赖于另一个变量。 假设我在一个表中有三行: starttime endtime comment 02:55 15:56 abc 03:54 23:46 def 09:33 12:69 oiuy 我想在Linq中使用Where条件,以便注释应根据开始时间显示,因此如果我选择02:55,则注释应显示abc 我使用这个linq查询: Comment = fr.Where(x => x.Starttim

我想显示一个变量的值,该变量的值依赖于另一个变量。 假设我在一个表中有三行:

starttime   endtime  comment
02:55       15:56    abc
03:54       23:46    def
09:33       12:69    oiuy
我想在Linq中使用
Where
条件,以便注释应根据开始时间显示,因此如果我选择
02:55
,则注释应显示
abc

我使用这个linq查询:

Comment = fr.Where(x => x.Starttime).Comment

但这是不正确的。有人能建议我需要什么改进吗?

Where子句必须返回一个
bool
,因此您缺少的只是实际的比较:

fr.Where(x => x.Starttime == "02:55")
但现在我们还需要决定选择什么。可能有多个、一个或没有返回项目。如果我们只需要第一个匹配,我们可以使用
FirstOrDefault
,它将返回第一条记录,如果没有返回,则使用
null
。如果未返回任何记录,我们还可以通过将
FirstOrDefault
的结果与
null
进行比较来选择默认值,如
“[未找到匹配]”
(使用
运算符):

如果要选择多个注释,则可以使用
select
方法指定要选择的属性,并使用
ToList()
列表中返回所有注释:


更新

现在,您已经发布了代码的屏幕截图(此处不推荐使用此截图-最好将相关代码粘贴到问题中的代码部分),您似乎正在根据
i分组
中项目的属性设置匿名类型实例的属性

由于您有
StartTime=fr.Min(x=>x.StartTime)
,而且
注释显然与
StartTime
有某种关联,因此您可能需要执行以下操作:

// Get the Comment from the item with the smallest (Min) StartTime
Comment = fr.OrderBy(x => x.StartTime).FirstOrDefault()?.Comment ?? "[no comment]",
试一试

如果你只想要第一场比赛,试试看

 var comment = fr.Where(x => x.Starttime == val).FirstOrDefault()?.Comment;
或者更简洁地说

var comment = fr.FirstOrDefault(x => x.Starttime == val)?.Comment;

您需要与Where(x=>x.Starttime==searchValue)进行比较,并且不能使用Where,但需要使用FirstOrDefault。这带来了另一个问题。不要在一行中执行此操作,但首先获取结果,然后在尝试访问注释属性
var Comment=fr.Where(x=>x.Starttime==“02:55”).FirstOrDefault()之前检查null。注释??“[没有对手]”@Steve:没有理由不在一行上这么做。这是一个完美的使用。例如,
FirstOrDefault(x=>x.StartTime==searchValue)?.Comment
。(如鲁弗斯的评论所示)你的图片确实让你对自己的工作有所了解(尽管发布实际代码总是更好)。请参阅我答案末尾的更新。谢谢,但is说val在当前上下文中不存在
val
将是一个变量,具有您要选择的开始时间。您可以像
string val=“02:55”那样声明它
var comments = fr.Where(x => x.Starttime == val).Select(x=> x.Comment);
 var comment = fr.Where(x => x.Starttime == val).FirstOrDefault()?.Comment;
var comment = fr.FirstOrDefault(x => x.Starttime == val)?.Comment;