使用linq从webservices中存在的数据表中获取不同的数据

时间:2015-11-11 06:40:05

标签: asp.net linq c#-4.0

我想从数据表中获得具有相同项目名的多行的单行。(例如,如果我们有两个具有相同项目名的行,则数据表应该只加载一行而忽略另一行。)。我一直在使用具有数据表的webservices。

  

我想使用linq实现此功能。

我已将我的代码粘贴到datatable.Pls帮助我处理代码。

[WebMethod]
        public DataTable Get()
        {
            int a = 0;
            cmd = con.CreateCommand();
            con.Open();
            cmd = con.CreateCommand();
            cmd.CommandText = " Select PROJECTNAME,COMPANY,PROJECTSTATUS,STARTEDIN,COMPLETEDIN FROM CMPPROJECT WHERE STATUS ='" + a + "'";
            using (OracleDataAdapter sda = new OracleDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    dt.TableName = "CMPPROJECT";
                    sda.Fill(dt);
                    return dt;
                }
            }
         }

1 个答案:

答案 0 :(得分:1)

您可以创建一个DataView对象,其中包含ToTable方法,您可以将true传递给参数distinct以选择不同的行。但这对我来说毫无意义。我会直接在选择查询中执行此操作:

DataTable d = new DataTable("CMPPROJECT");
d.Columns.Add("PROJECTNAME");
d.Columns.Add("COMPANY");

d.Rows.Add(1, 1);
d.Rows.Add(1, 1);
d.Rows.Add(2, 2);

d = new DataView(d).ToTable("CMPPROJECT", true, "PROJECTNAME", "COMPANY");

这是`linq解决方案:

var select = (from a in d.AsEnumerable()
              select new { c1 = a["PROJECTNAME"], c2 = a["COMPANY"] }).Distinct().ToList();

d.Clear();

foreach (var item in select)
    d.Rows.Add(item.c1, item.c2);