【问题标题】:Unable to cast object of type 'System.Data.EnumerableRowCollection`1[System.Int32]' to type 'System.IConvertible'无法将“System.Data.EnumerableRowCollection`1[System.Int32]”类型的对象转换为“System.IConvertible”类型
【发布时间】:2018-06-28 03:24:06
【问题描述】:

我正在尝试使用下面的代码来存储价值,但它给了我错误。

int dqty=  Convert.ToInt32(from row in result.AsEnumerable()
where row.Field<string>("batch_num") == k_batch.ToString() 
select row.Field<int>("qty"));

基本上我想检索“数量”的值。

【问题讨论】:

    标签: c# linq datatable


    【解决方案1】:

    不管你的其他问题,你不能将列表/集合转换为整数

    您需要使用FirstOrDefault 或类似名称

    Enumerable.FirstOrDefault Method (IEnumerable)

    返回序列的第一个元素,如果 序列不包含任何元素。

    示例

     int dqty = (from row in result.AsEnumerable()
                  where row.Field<string>("batch_num") == k_batch.ToString() 
                  select row.Field<int>("qty")).FirstOrDefault();
    

    更新

    更多示例

    var list = new List<int>()  {23, 345, 546, 345};
    
    var result = (
        from row in list
        where row > 23
        select row).FirstOrDefault();
    
    Console.WriteLine(result);
    

    输出

    345
    

    Full Demo here

    【讨论】:

    • int 不包含 for .FirstOrDefault()
    • 如果我不想检索默认值怎么办?因为默认值可以改变我的结果。
    • 如果在 DataTable 中找不到值,您上面的代码会返回 546。我不想要这个。因为它会改变结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2021-01-29
    • 2015-12-17
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多