4

DataTable をクエリする 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;

私は例外を取得し続けます:

入力文字列は、正しい形式ではありませんでした

主な問題は、電気 == "" の場合に発生します。

4

4 に答える 4

4

列のデータに先頭/末尾の空白が含まれていないかどうかを確認します-つまり"15 ""15"変換を試みる前にトリミングする(または行う可能性がある)場合:

Int32.Parse(row.Field<String>("electrical").Trim())

ところで:エラーとは関係ありませんが、letステートメントを使用してローカル変数を導入し、変換を1回行います:

let x = Int32.Parse(row.Field<String>("electrical").Trim()) 
where x >= 100...
于 2013-05-29T19:20:17.683 に答える
0

何も機能させることができなかったので、メソッド全体をやり直しました:

    public bool GetElectricalStatus(string printName)
    {
        List<object> eGoodList = new List<object>();
        var eGoodCountQuery =
            from row in singulationOne.Table.AsEnumerable()
            where row.Field<String>("print") == printName
            select row.Field<String>("electrical");

        foreach (var eCode in eGoodCountQuery)
        {
            if (!string.IsNullOrEmpty(eCode.ToString()))
            {
                int? eCodeInt = Convert.ToInt32(eCode);
                if (eCodeInt != null &&
                    (eCodeInt >= 100 && eCodeInt <= 135) || eCodeInt == 19)
                {
                    eGoodList.Add(eCode);
                }
            }
        }
        if (eGoodList.Count() > 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

主な問題は、電気 == "" の場合に発生します。

于 2013-06-03T17:19:14.067 に答える