C# 8:Linq Select,将字符串解析为 Nullable Int

C# 8: Linq Select, Parse String into Nullable Int

我正在尝试使用 Linq select 将字符串解析为 Nullable int。以下最后一行在 Select 中不起作用。接收错误如下。如何修复?

资源:

var aviationInfo = _dbContext.Cpamlt
                    .Where(c=> c.Account == bppInfoRequestDto.AccountNumber)
                    .Select(cpamlt => new BppAviationInfoDto()
                    {
                        AccountNumberIdentityId = cpamlt.Cpamltid,
                        SerialNumber = cpamlt.Vinserno,
                        Manufacturer = cpamlt.Manmod,
                        MakeModel = cpamlt.Manmak,
                        YearManufactured = Int32.TryParse(cpamlt.Manyr, out tempVal) ? Int32.Parse(cpamlt.Manyr) : (int?)null, 

Error: The name 'tempVal' does not exist in the current context

尽可能避免扩展方法

将 Net Core 3.1 与 C#8 结合使用

语法要求您定义变量(如果您之前没有定义的话)。所以使用

Int32.TryParse(cpamlt.Manyr, out int tempVal)

但是,您的代码可以缩短,因为 tempVal 将包含您想要的值,您无需再次解析 -

YearManufactured = Int32.TryParse(cpamlt.Manyr, out int tempVal) ? tempVal : (int?)null,

您可以创建一个新方法来包装此操作。

static int? NullableParse(string input)
{
    int output = 0;

    if (!int.TryParse(input, out output))
    {
        return null;
    }

    return output;
}