c# - 在 LINQ 中使用 .first 时,当序列不包含任何元素时,有没有办法设置默认值?

标签 c#

<分区>

我正在使用以下代码:

public class BtnCountViews
{
    public int btnCount { get; set; }
    public int views { get; set; }
}

var btns = "(BTNACOUNT + BTNBCOUNT) AS BtnCount, VIEWS As Views";
Counts.btnCountViewsToday = 
   db2.Query<BtnCountViews>("SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd).First();

当第 yymmdd 天没有返回记录时,这会出错并显示一条消息,提示 sequence contains no elements

我确实理解为什么会发生这种情况,但想要一些关于如何阻止它抛出异常的建议。

如果没有元素,我想做的是让 Counts.btnCountViewsToday 包含一个在 btnCount 和 View 字段中填充了 0 的对象。

最佳答案

尝试使用FirstOrDefault

 var btnCountViewsToday = 
   db2.Query<BtnCountViews>("SELECT " + btns +
    " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd).FirstOrDefault();

如果您想为可能的空响应创建一个默认对象,您可以像这样使用 DefaultIfEmpty

var btnCountViewsToday = 
   db2.Query<BtnCountViews>("SELECT " + btns + 
   " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd).
   DefaultIfEmpty(new BtnCountViews()).FirstOrDefault();

关于c# - 在 LINQ 中使用 .first 时,当序列不包含任何元素时,有没有办法设置默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689541/

相关文章:

c# - VisibleChanged 在不可见时不引发

c# - INSERT 语句不会插入到使用 C# Winform 的 SQL Server 数据库中

c# - 新的 onvif 事件 wsdl 仍未修复?

c# - 服务堆栈 : Attributes for indexes not working?

c# - MVC5模型不记录文本框的文本值

c# - 使用 ASP.Net 从 HTML 发送电子邮件

c# - 将 Model 绑定(bind)到 ViewModel 的方法

c# - 如何以编程方式检查 SMB 连接是否已加密?

c# - 在多线程 Windows 服务应用程序中使用的最佳 NHibernate session 管理方法是什么?

c# - 将 Task.Run 与 async/await 关键字混合使用时出现奇怪的编译器行为