Linq 检查字段类型是数字还是字符串



我有一个来自我正在检索的数据集中的 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
             }    

最新更新