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

时间:2018-01-02 19:06:41

标签: c# linq linq-to-sql

我正在检索的数据集中有一个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();

现在,如果字段类型是字符串,则可以正常工作。如果它是数字,它会给我一个错误&#34;无法将System.Int64类型的对象强制转换为System.String&#34;。但是,该值已经放在int(custAccount)中:

public class clsTableData
    {

        public string tableName { get; set; }
        public int custAccount { get; set; }

    }

似乎int.TryParse存在问题。 (我不一定要使用int.TryParse。我实际上认为正确的解决方案是找出字段类型是否为整数而不是检查字段值。)任何帮助都将不胜感激。

答案

感谢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();

3 个答案:

答案 0 :(得分:1)

感谢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();

答案 1 :(得分:0)

您可以在其上调用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(); ,以便始终从字符串对象进行转换。

whois

答案 2 :(得分:0)

您可以直接检查字段类型,而不是通过推断它:

  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
             }    
相关问题