C# datatable linq接收方式3 this ushort变量"Mins"

C# datatable linq receiving mode 3 this ushort variable "Mins"

我已经编写了一个 linq 命令,使 mins 变量变为 3,但我得到了一个 InvalidCastException。如果没有 System.Data.DataSetExtension.dll,此命令是否有效?

我无法添加此引用,因为它已经存在但没有此 dll。谢谢

这是我的代码:

dataTable = dataTable.AsEnumerable()
                     .Where(x => x.Field<int>("Mins") % 3 == 0)
                     .CopyToDataTable();

让我澄清一下您的要求:您要过滤 Mins

列的行
  1. 只有整数值
  2. 是 3 的乘积。
        static DataTable GenerateTestTable(string[] nums)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Mins");
            foreach (string num in nums)
            {
                DataRow row = dt.NewRow();
                row[0] = num;
                dt.Rows.Add(row);
            }
            return dt;
        }

        static void Main(string[] args)
        {
            DataTable dt = GenerateTestTable(new string[] { "1", "3", ".3" });
            int n;
            dt = dt.AsEnumerable()
                   .Where(x => int.TryParse(x["Mins"].ToString(), out n)
                            && n % 3 == 0)
                   .CopyToDataTable();
            foreach (DataRow r in dt.Rows)
            {
                Console.WriteLine(r[0]);
            }
            //only outputs 3
            Console.ReadKey();
        }

似乎 .Where(x => Convert.ToDouble(x["Mins"]) % 3 == 0) 也有效。但我还是更喜欢先检查 int,因为我对 double % .

的结果从来没有信心

参考

C# testing to see if a string is an integer?

Field(DataRow, String)