【问题标题】:Compare values of rows of datatable and list of tuples in C#在 C# 中比较数据表行和元组列表的值
【发布时间】:2017-11-10 16:09:27
【问题描述】:

我有一个datatable,其中一列是id1,还有一个整数元组列表List<Tuple<int,int>>

datatableid1 可以为特定名称有多个值。元组列表实际上是一个引用列表,其中包含所有 id id1tuple.Item1id2tuple.Item2。我想将datatableid1的所有值与元组列表的id1进行比较,并且只从元组列表中获取所有对应的id2

一种方法是首先将数据表中的所有id1 放入一个列表中,然后与类似元组的列表进行比较

var listOfid1 = datatable.AsEnumerable()
    .Where(x => x.field<int>("id1"))
    .ToList();

现在将这个listOfid1 与元组列表进行比较,得到所有对应的id2 w.r.t id1

有人可以帮助我一步完成,即将数据表的所有id1 与元组的id1 进行比较,并在列表中获取所有id2

【问题讨论】:

  • 为什么你有一个列id1,但元组中有两个项目?它们有什么关系?
  • 从:x.field("id1") 更改为:x.field>("id1")
  • @Tim:这是因为对于一个特定的名称,我们有多个 id1。而该列表只是一个参考数据,其中我们拥有所有 id1 和 id2 而与名称无关。但现在我想通过比较数据表和列表的 id1 来获得该名称的所有 id2

标签: c# list linq tuples


【解决方案1】:

你可以使用LINQJOIN

var id2Items = from row in datatable.AsEnumerable()
               join t in yourTupleList
               on row.Field<int>("id1") equals t.Item1
               select t.Item2;
List<int> id2List = id2Items.ToList();

请求的方法语法:

List<int> id2List = table.AsEnumerable()
  .Join(yourTupleList, row => row.Field<int>("id1"), t => t.Item1, (r, t) => t.Item2)
  .ToList();

或使用Where(效率较低)但可读性更好:

List<int> id1List = table.AsEnumerable().Select(row => row.Field<int>("id1")).ToList();
List<int> id2List = yourTupleList
  .Where(t => id1List.Contains(t.Item1))
  .Select(t => t.Item2) 
  .ToList();

【讨论】:

  • :你能帮我把它转换成 lambda,因为我是 c# 和 linq 的初学者吗?
猜你喜欢
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多