【问题标题】:LINQ: Comparing specific values in two datatables [duplicate]LINQ:比较两个数据表中的特定值
【发布时间】:2019-05-30 06:58:41
【问题描述】:

我有两个数据表。

数据表 1 包含包含 FirstName、LastName、DOB、Gender 列的数据 数据表 2 的数据包含 CustomerID、FirstName、LastName、DOB、Gender 列

我想比较数据表 1 和 2 中的名字、姓氏、出生日期和性别,如果匹配,则将数据表 2 中的该行加载到新数据表中。

以下是我正在使用的,我可以与 Firstname 进行比较,但我想添加姓氏、出生日期和性别。请你告诉我我该怎么做?

我想这样做,如果名字、姓氏、出生日期和性别匹配,则返回数据表 2 中的匹配行。表之间的列长度不同。

DataTable dtMerged = (from a in dataTable.AsEnumerable()
                                  join b in dt.AsEnumerable()
                                  on a["Forename"].ToString() equals b["FirstName"].ToString()
                                  into g
                                  where g.Count() > 0
                                  select a).CopyToDataTable();

            dtMerged.AsDataView();

【问题讨论】:

  • 对不起@Anas,它不是重复的。我确实经历了那个答案,但是那个答案比较了所有列,但我想比较特定的列。
  • @edcoder 是的,确实是重复的。可能不准确。

标签: c# linq


【解决方案1】:

试试这个

DataTable dtMerged = dataTable.AsEnumerable()
    .Where(ra => dt.AsEnumerable()
    .Any(rb => rb.Field<string>("firstname") == ra.Field<string>("firstname")
      && rb.Field<string>("lastname") == ra.Field<string>("lastname")
      && rb.Field<DateTime>("dob") == ra.Field<DateTime>("dob")
      && rb.Field<string>("gender") == ra.Field<string>("gender")))
              .CopyToDataTable();

【讨论】:

  • 谢谢@Shyam。这行得通。正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多