gpt4 book ai didi

c# - 在 LINQ 中将字符串转换为 Int

转载 作者:太空狗 更新时间:2023-10-30 00:32:35 24 4
gpt4 key购买 nike

我有一个查询数据表的 LINQ 查询。在 DataTable 中,该字段是一个字符串,我需要将它与一个整数进行比较,基本上:

if ((electrical >= 100 && electrical <= 135) || electrical == 19)
{
// The device passes
}

问题是,我正尝试在 LINQ 中这样做:

        var eGoodCountQuery = 
from row in singulationOne.Table.AsEnumerable()
where (Int32.Parse(row.Field<String>("electrical")) >= 100 &&
Int32.Parse(row.Field<String>("electrical")) <= 135) &&
Int32.Parse(row.Field<String>("electrical")) != 19 &&
row.Field<String>("print") == printName
select row;

我不断收到异常:

Input string was not in a correct format

主要问题出现在electrical == ""

最佳答案

不幸的是,该框架没有提供一种干净利落的方式来处理失败的解析场景。在所提供的内容中,它们仅抛出异常或使用 out 参数,这两者都不适用于 linq 查询。如果您正在解析的任何一个值失败,整个查询都会失败,您就不能真正使用 out 参数。您需要提供一种方法来处理没有抛出且不需要使用 out 参数的解析。

您可以通过多种方式处理此问题。在失败时实现它,返回一些默认标记值。

public static int ParseInt32(string str, int defaultValue = 0)
{
int result;
return Int32.TryParse(str, out result) ? result : defaultValue;
}

或者我会建议,返回一个可为空的值(null 表示它失败)。

public static int? ParseInt32(string str)
{
int result;
return Int32.TryParse(str, out result) ? result : null;
}

这极大地简化了您的查询,同时仍然保持其可读性。

public bool GetElectricalStatus(string printName)
{
var query =
from row in singulationOne.Table.AsEnumerable()
where row.Field<string>("print") == printName
// using the nullable implementation
let electrical = ParseInt32(row.Field<string>("electrical"))
where electrical != null
where electrical == 19 || electrical >= 100 && electrical <= 135
select row;
return !query.Any();
}

另外,您对 Convert.ToInt32() 方法的使用不正确。它与调用 Int32.Parse() 相同并且返回可空值,它会抛出失败。

关于c# - 在 LINQ 中将字符串转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com