首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更好的方式通过Linq或更好的代码来实现这一点?

有没有更好的方式通过Linq或更好的代码来实现这一点?
EN

Stack Overflow用户
提问于 2020-01-31 04:36:01
回答 2查看 56关注 0票数 0

假设我有以下按列ID DataTable排序的内容:

代码语言:javascript
复制
    ID    A    B
    -------------
    1    TT   12
    1    ZZ   12
    2    SS   11
    3    SS   15
    3    RR   27

我的目标是实现这一点:

如果有任何具有相同ID的重复行,我需要删除列A和B中的值。

这是我想要基于我的datatable实现的:

代码语言:javascript
复制
ID   A    B
-----------
1    TT   12
1       
2    SS   11
3    SS   15
3  

    //here's the alogirithm that i have tried :

    DataTable dt = new DataTable();
    dt.Columns.Add("A", typeof(int));
    dt.Columns.Add("B", typeof(string));
    dt.Columns.Add("C", typeof(int));


    dt.Rows.Add(1, "TT",12);
    dt.Rows.Add(1, "ZZ",12);
    dt.Rows.Add(2, "SS",11);
    dt.Rows.Add(3, "SS",15);
    dt.Rows.Add(3, "RR", 27);

    int id1 = 0;
    int id2 = 0;

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        id1= (int)dt.Rows[i]["A"];
        for (int j = i + 1; j < dt.Rows.Count; j++)
        {
            id2 = (int)dt.Rows[j]["A"];
            if (id1 == id2) 
            {
                dt.Rows[j]["B"] = DBNull.Value;
                dt.Rows[j]["C"] = DBNull.Value;


            }
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-31 04:50:26

我认为这样做的一个好方法是:

代码语言:javascript
复制
// group by the first column
var groupsOfDuplicates = dt.Rows.Cast<DataRow>().GroupBy(row => row[0]); 

// for each group
foreach (var groupOfDuplicateRows in groupsOfDuplicates)
{
    // Skip the first, let's just erase the others
    foreach (var duplicateRow in groupOfDuplicateRows.Skip(1))
    {
        duplicateRow[1] = DBNull.Value;
        duplicateRow[2] = DBNull.Value;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2020-01-31 05:08:26

代码语言:javascript
复制
            dt.AsEnumerable().GroupBy(x => x["A"]).ToList().ForEach(myGroup =>
            myGroup.Skip(1).ToList().ForEach(myRow => { 
                                                        myRow["B"] = DBNull.Value;
                                                        myRow["C"] = DBNull.Value;
                                                      }));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59994093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档