C# 从数据表中获取不同的值
我有一个带有值的C# 从数据表中获取不同的值,c#,linq,C#,Linq,我有一个带有值的数据表: ID NameID Name 1 1 qwe 2 2 ert 3 2 ert 4 3 dffg 5 3 dffg 我想得到一个数据表,其中包含如下不同的行: ID NameID Name 1 1 qwe 2 2 ert 4 3 dffg 如何使用LINQ或其他实现这一点?将datatable分配给dataview,使用d
数据表
:
ID NameID Name
1 1 qwe
2 2 ert
3 2 ert
4 3 dffg
5 3 dffg
我想得到一个数据表
,其中包含如下不同的行:
ID NameID Name
1 1 qwe
2 2 ert
4 3 dffg
如何使用LINQ或其他实现这一点?将datatable分配给dataview,使用dataview对象,我们可以使用RowFilter,如下所示
var rows = tbl.AsEnumerable().Select(row => row).ToList();
tbl = new DataTable();
tbl.Columns.Add("ID", typeof(Int32));
tbl.Columns.Add("NameID", typeof(Int32));
tbl.Columns.Add("Name", typeof(String));
rows.GroupBy(r => r.Field<int>("NameID"))
.Select(rr => rows.First(rw => rw.Field<Int32>("NameID") == rr.Key))
.ToList()
.ForEach(rname => tbl.Rows.Add(new object []
{
rname.Field<Int32>("ID"),
rname.Field<Int32>("NameID"),
rname.Field<String>("Name"),
}));
Dim DTb As New DataTable()
DataView dView= new DataView(DTb);
dView.RowFilter = strCondition.ToString //strCondition contains the condition to filter
strCondition将包含要筛选的条件,筛选后,按如下所示将dataview重新分配给datatable
DTb = dView.ToTable()
试试看
当存在重复项时,您希望如何确定要选择哪些ID?始终是组中最低的ID?我尝试了下面的LINQ dt.AsEnumerable().Select(r=>r.Field(“NameID”).Distinct();但结果不会出现。它将只返回Name列。OP需要所有栏目。@Upendra Chaudhari:是的,没有回答问题中的那一点。更新了我的查询。@Upendra Chaudhari:修改后是否验证了代码段?它返回8行!好的,我认为这些线是错误的,因为我在第二个测试数据设置块中得到了相同的线。很抱歉。@Upendra Chaudhari:好的,没问题,基本上这些行允许使用相同的模式设置空数据网格,如果我们可以使用类似Rows.Clear()的东西,它会更干净
DTb = dView.ToTable()
var result = from ele in dt.AsEnumerable()
group ele by ele["NameID"] into g
select g.FirstOrDefault();
foreach (var t in result)
Console.WriteLine(t[0] + " " + t[1] + " " + t[2]);