我一直在使用linq.i从datatable检索数据也已成功检索数据。问题是,如果两个记录具有相同的项目名称,我必须只显示一条记录(不论哪条记录,但必须显示一条记录)来自重复记录)。
对于具有相同项目名称的多个记录,只应显示其中的一条记录。
我已粘贴了我的工作代码。
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);
var select = (from ab in dt.AsEnumerable()
select new { c1 = ab["PROJECTNAME"], c2 = ab["COMPANY"], c3 = ab["PROJECTSTATUS"], c4 = ab["STARTEDIN"], c5 = ab["COMPLETEDIN"] }).Distinct().ToList();
dt.Clear();
foreach (var item in select)
dt.Rows.Add(item.c1, item.c2, item.c3, item.c4, item.c4);
return dt;
}
请帮我修改工作代码..
答案 0 :(得分:1)
您可以使用GroupBy
:
var projectGroups = dt.AsEnumerable()
.Select(row => new
{
project = row.Field<string>("PROJECTNAME"),
company = row.Field<string>("COMPANY"),
status = row.Field<string>("PROJECTSTATUS"),
startedin = row.Field<DateTime>("STARTEDIN"), // presumes a DateTime-column
completedin = row.Field<DateTime>("COMPLETEDIN") // presumes a DateTime-column
})
.GroupBy(x => x.project)
.Select(g => g.First())
.Distinct()
.ToList();