none
求助:LINQ语句的Select问题 RRS feed

  • 问题

  • LINQ的数据源是datatable,其结构是运行时导入数据时产生的结构,并不是预先定义好的,怎么select类似sql的语句 “select 字段1,字段2”   呢

    帮助中的实例全部都是已经定义好结构datatable的示例,没有什么参考价值。

    另:读取excel 用sql " SELECT * FROM [" + sheetName + "$] ";

    怎么读取指定列,指定范围行呢?

    2019年7月12日 2:52

答案

  • Hi 

    感谢你的反馈。

    如果你想从datatable查询多个字段,你可以尝试以下代码。

      var result1 = from data in dt.AsEnumerable()
                              select new
                              {
                                  Name = data.Field<int>("Name"),
                                  Age = data.Field<int>("Age"),
                              };

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ybgjj2009 2019年7月12日 6:36
    2019年7月12日 6:18
    版主
  • Hi ybgjj2009,

    你可以参考以下代码来实现查询datatable中的字段。

                DataTable dt = new DataTable();
                dt.Columns.Add("Right", typeof(bool));
                dt.Columns.Add("Age", typeof(int));
                dt.Columns.Add("Name", typeof(string));
                dt.Rows.Add(true, 22, "test1");
                dt.Rows.Add(true, 23, "test2");
                dt.Rows.Add(false, 24, "test3");
                var result = dt.AsEnumerable().Select(m => m.Field<int>("Age")).ToArray();

    示例结果:

    如果你想查询excel的指定列或者范围行,你可以用下面的代码将excel转换为datatable。 然后利用操作datatale的方法去获取指定的值。

       DataTable    dt = exceldatatable("D:\\test1.xlsx");
    
    
     public static DataTable exceldatatable(string path)
            {
                DataTable dt = new DataTable();
                string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;MAXSCANROWS=0'";
                    using (OleDbConnection conn = new OleDbConnection(connectionString))
                {
                    using (OleDbCommand comm = new OleDbCommand())
                    {
                        string sheetName = "Sheet1";
                        comm.CommandText = "Select * from [" + sheetName + "$]";
                        comm.Connection = conn;
                        using (OleDbDataAdapter da = new OleDbDataAdapter())
                        {
                            da.SelectCommand = comm;
                            da.Fill(dt);
                            return dt;
                        }
                    }
    
                }
            }

    结果:

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ybgjj2009 2019年7月12日 6:10
    2019年7月12日 5:15
    版主

全部回复

  • LINQ(Language Integrated Query)语言

    是一组用于C#Visual Basic语言的扩展集成查询

    它允许编写C#或者Visual Basic代码以操作内存数据的方式,查询数据库

    参照资料

    2019年7月12日 3:24
  • Hi ybgjj2009,

    你可以参考以下代码来实现查询datatable中的字段。

                DataTable dt = new DataTable();
                dt.Columns.Add("Right", typeof(bool));
                dt.Columns.Add("Age", typeof(int));
                dt.Columns.Add("Name", typeof(string));
                dt.Rows.Add(true, 22, "test1");
                dt.Rows.Add(true, 23, "test2");
                dt.Rows.Add(false, 24, "test3");
                var result = dt.AsEnumerable().Select(m => m.Field<int>("Age")).ToArray();

    示例结果:

    如果你想查询excel的指定列或者范围行,你可以用下面的代码将excel转换为datatable。 然后利用操作datatale的方法去获取指定的值。

       DataTable    dt = exceldatatable("D:\\test1.xlsx");
    
    
     public static DataTable exceldatatable(string path)
            {
                DataTable dt = new DataTable();
                string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;MAXSCANROWS=0'";
                    using (OleDbConnection conn = new OleDbConnection(connectionString))
                {
                    using (OleDbCommand comm = new OleDbCommand())
                    {
                        string sheetName = "Sheet1";
                        comm.CommandText = "Select * from [" + sheetName + "$]";
                        comm.Connection = conn;
                        using (OleDbDataAdapter da = new OleDbDataAdapter())
                        {
                            da.SelectCommand = comm;
                            da.Fill(dt);
                            return dt;
                        }
                    }
    
                }
            }

    结果:

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ybgjj2009 2019年7月12日 6:10
    2019年7月12日 5:15
    版主
  • 谢谢解答,只是 查询多个字段怎么处理呢?比如sql语法的

    select 字段1,字段2。。。字段n    from 。。。。where 。。。。

    2019年7月12日 6:12
  • Hi 

    感谢你的反馈。

    如果你想从datatable查询多个字段,你可以尝试以下代码。

      var result1 = from data in dt.AsEnumerable()
                              select new
                              {
                                  Name = data.Field<int>("Name"),
                                  Age = data.Field<int>("Age"),
                              };

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ybgjj2009 2019年7月12日 6:36
    2019年7月12日 6:18
    版主
  • Hi 

    感谢你的反馈。

    如果你想从datatable查询多个字段,你可以尝试以下代码。

      var result1 = from data in dt.AsEnumerable()
                              select new
                              {
                                  Name = data.Field<int>("Name"),
                                  Age = data.Field<int>("Age"),
                              };

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    谢谢,问题已经解决。感谢你的耐心解答!
    2019年7月12日 6:37