为了账号安全,请及时绑定邮箱和手机立即绑定

在数据表中仅按列显示的正确方法是什么

在数据表中仅按列显示的正确方法是什么

C#
30秒到达战场 2022-06-12 16:37:39
我的数据表中有以下数据在上述数据上,我正在使用以下 LINQ 查询过滤那些重复的记录DataTable HasDuplicates = dt.AsEnumerable()                               .GroupBy(g => g["Empolyee_CRC"])                               .Where(c => c.Count() > 1)                               .Select(g => g.OrderBy(r => r["Empolyee_CRC"]).First())                               .CopyToDataTable();哪个返回我下面的数据以上数据已成功过滤,但我面临的问题是 Budget_CRC 列未删除。所以,为此我写了下面的查询并达到了我想要的结果。DataTable HasDuplicates = dt.AsEnumerable()                          .GroupBy(g => g["Empolyee_CRC"])                          .Where(c => c.Count() > 1)                          .Select(g => g.OrderBy(r => r["Empolyee_CRC"]).First())                          .CopyToDataTable();HasDuplicates.Columns.Remove("Budget_CRC");HasDuplicates.AcceptChanges();我的问题是我如何使用上面的 LINQ 查询只获得一个 (Emmplolyee_CRC) 过滤列,而无需编写以下代码行HasDuplicates.Columns.Remove("Budget_CRC");HasDuplicates.AcceptChanges();
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

DataTable如果您希望查询返回,则需要加载另一个DataTable


所以使用下面的查询,


DataTable dtResult = new DataTable();

dtResult.Columns.Add("Empolyee_CRC");


DataTable HasDuplicates = dt.AsEnumerable()

                            .GroupBy(g => g["Empolyee_CRC"])

                            .Where(c => c.Count() > 1)

                            .OrderBy(x => x.Key)

                            .Select(g => dtResult.LoadDataRow(new object[] { g.FirstOrDefault().Field<string>("Empolyee_CRC") }, false))

                            .CopyToDataTable();

或者


DataTable HasDuplicates = dt.AsEnumerable()

                            .GroupBy(g => g["Empolyee_CRC"])

                            .Where(c => c.Count() > 1)

                            .OrderBy(x => x.Key)

                            .Select(g => dtResult.LoadDataRow(new object[] { g.Key }, false))

                            .CopyToDataTable();

输出:

//img1.sycdn.imooc.com//62a5a6090001bc7e01410100.jpg

编辑:


如果您想避免创建新的数据表,那么您可以简单地将您选择的数据投影到列表中。


在if下面,您可以使用任何分开的条件,&&也可以按原样使用。取决于你的需要。


if (dt.Rows.Count > 0 && dt.AsEnumerable().Select(x => x["Empolyee_CRC"]).Count() > 0)

{

    var result = dt.AsEnumerable()

                   .GroupBy(g => g["Empolyee_CRC"])

                   .Where(c => c.Count() > 1)

                   .OrderBy(x => x.Key)

                   .Select(g => new { Empolyee_CRC = g.FirstOrDefault().Field<string>("Empolyee_CRC") })

                   .ToList();

}

输出:

//img1.sycdn.imooc.com//62a5a6170001099a04150115.jpg

查看完整回答
反对 回复 2022-06-12
?
jeck猫

TA贡献1909条经验 获得超7个赞

您的 LINQ 中似乎有错误的 select 语句,请考虑以下示例:


DataTable HasDuplicates = dt.AsEnumerable()

                          .GroupBy(g => g["Empolyee_CRC"])

                          .Where(c => c.Count() > 1)

                          .Select(g => g

                                .OrderBy(r => r["Empolyee_CRC"])

                                .Select(r => r["Empolyee_CRC"])

                                .First())

                          .CopyToDataTable();


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信