c# - Linq 的 FirstOrDefault 充当其他类型?

标签 c# linq .net-4.0

我有这个代码:

var res1 = dtData.AsEnumerable()
            .Where(...)
            .Select(f => new { val = f["PremiumAfterUWDiscount"].ToDecimalOrZero(), 
                   idpolicy = f["IdPolicy"].ToString() })
            .FirstOrDefault();

但是,由于这会返回匿名类型,因此其默认值为 null

我希望它充当 int 类型的 FirstOrDefault

因此,如果没有记录,它将返回 0(默认行为为 int)。

这可能吗?

附: (当然我可以在条件下检查它,但我仍然更喜欢 linq 方式)。

最佳答案

返回一个表示“无”的匿名类型,并使用空合并运算符:

var res1 = dtData.AsEnumerable()
        .Where(...)
        .Select(f => new { val = f["PremiumAfterUWDiscount"].ToDecimalOrZero(), 
               idpolicy = f["IdPolicy"].ToString() })
        .FirstOrDefault() ?? new { val = 0, idpolicy = "" };

或者 DefaultIfEmpty 扩展方法:

var res1 = dtData.AsEnumerable()
        .Where(...)
        .Select(f => new { val = f["PremiumAfterUWDiscount"].ToDecimalOrZero(), 
               idpolicy = f["IdPolicy"].ToString() })
        .DefaultIfEmpty(new { val = 0, idpolicy = "" })
        .FirstOrDefault();

如果您实际上返回一个对象并稍后进行转换(根据@recursive的答案),您只能返回一个int来代替匿名类型,但这对我来说似乎适得其反。

FirstOrDefault 没有提供指定“默认”是什么的方法。

关于c# - Linq 的 FirstOrDefault 充当其他类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11434789/

相关文章:

c# - 使用 Interop 从 Excel 文件中删除空行和空列的最快方法

c# - UDP 套接字监听器未接收到数据

c# - LINQ 或 ADO.net Entity Framework - 学习哪个?

javascript - 将 .Net LINQ 查询转换为 Angular 2 TypeScript/JavaScript

c# - 使用 LINQ 获取包含自定义对象的列表的总和/平均值

c# - 如何在 Linq to SQL 中确定记录是否已成功添加?

entity-framework - 调用FOR XML存储过程的 Entity Framework 在2033个字符处被截断

visual-studio-2010 - 为什么 Visual Studio 2010 无法在本地计算机上部署和启动 IIS Express?

c# - 获取属性的值

c# - 如何在 DLL 而不是 exe 上使用 app.config