我想从数据表中获得具有相同项目名的多行的单行。(例如,如果我们有两个具有相同项目名的行,则数据表应该只加载一行而忽略另一行。)。我一直在使用具有数据表的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;
}
}
}
答案 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);