Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从数据表中获取不同的值_C#_Linq - Fatal编程技术网

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]);