避免基于单列的linq重复

时间:2015-11-11 09:04:07

标签: asp.net linq c#-4.0

我一直在使用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;
             }

请帮我修改工作代码..

1 个答案:

答案 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();