我有一个来自我正在检索的数据集中的 linq 语句。 问题是有一个字段可以是字符串或数字 TYPE,具体取决于我从哪个表中提取信息。(两个表具有相同的字段名称(。 这是 linq:
List<clsTableData> allFieldsList = (from g in ds.Tables["Default"].AsEnumerable()
select new clsTableData
{
tableName = g.Field<string>("tablename"),
custAccount = int.TryParse(g.Field<string>("accountNum"), out result) ?
Convert.ToInt32(g.Field<System.Int64>("accountNum")) :
12345
}
).ToList();
现在,如果字段类型为字符串,则它可以工作。 如果是数字,它会给我一个错误"无法将 System.Int64 类型的对象转换为 System.String 类型"。 但是,该值已经放置在 int (custAccount( 中:
public class clsTableData
{
public string tableName { get; set; }
public int custAccount { get; set; }
}
int 中似乎有问题。尝试解析。 (我没有义务使用 int。尝试解析。 我实际上认为正确的解决方案是找出字段类型是否为整数,而不是检查字段值(任何帮助将不胜感激。
答
感谢MethodMan,它已经解决了:
List<clsTableData> allFieldsList = (from g in ds.Tables["Default"].AsEnumerable()
select new clsTableData
{
tableName = g.Field<string>("tablename"),
custAccount = g["accountNum"].GetType() == typeof(System.Int64) ?
Convert.ToInt32(g.Field<System.Int64>("accountNum")) :
12345
}
).ToList();
感谢MethodMan! 答案如下:
List<clsTableData> allFieldsList = (from g in ds.Tables["Default"].AsEnumerable()
select new clsTableData
{
tableName = g.Field<string>("tablename"),
custAccount = g["accountNum"].GetType() == typeof(System.Int64) ?
Convert.ToInt32(g.Field<System.Int64>("accountNum")) :
12345
}
).ToList();
您可以在其上调用ToString()
,以便始终从字符串对象进行转换。
List<clsTableData> allFieldsList = (from g in ds.Tables["Default"].AsEnumerable()
select new clsTableData
{
tableName = g.Field<string>("tablename"),
custAccount = int.TryParse((g.Field<string>("accountNum")).ToString(), out result) ?
Convert.ToInt32(g.Field<System.Int64>("accountNum")) :
12345
}
).ToList();
您可以直接检查字段类型,而不是通过推断来检查它:
select new clsTableData
{
tableName = g.Field<string>("tablename"),
custAccount = dtRow.Table.Columns["accountNum"].DataType == typeof(System.Int64) ?
Convert.ToInt32(g.Field<System.Int64>("accountNum")) :
12345
}