【问题标题】:Finding if two values exist for the same ID in dataset查找数据集中相同 ID 是否存在两个值
【发布时间】:2019-07-30 15:18:11
【问题描述】:

我有一个数据表结果集,其中有两列我需要关注 ActionCode 和 ProcessID

我正在尝试寻找最快的方法来查看是否同时存在 AcitonCodes A 和 E,两者都用于相同的 ProcessID。

我正在寻找如何在数据表中搜索值的所有这些示例,但无法弄清楚如何将其限制为相同的 ID。请帮忙。

这现在有效,它返回所有 A 和 E 行,但我似乎无法找到仅当 A 和 E 都属于同一个 ProcessID 时返回结果的方法。

DataRow[] foundAuthors = dt.Select("ActionCode = '" + 'A' + "' or ActionCode = '" + 'E' + "'" );

var x = from e in dt.AsEnumerable()
                                where e.Field<int>("ActionCode") == 'A' &&
                                      e.Field<int>("SeriesID") == seriesid
                                select e;

最后一个问题。 LINQ 是解决这个问题的最佳方式吗?我应该使用“更新”和更喜欢的命名空间吗? 谢谢!

【问题讨论】:

    标签: c# asp.net .net linq


    【解决方案1】:

    在没有 IDE 的情况下,我想出了以下 LINQ,可能需要调整:

        dt[0].Rows.Cast<DataRow>()
        .Select(r => new { pID = (long)r["ProcessID"], action = (string)r["ActionCode"] })
        .Where(x => x.action == "A" || x.action == "E")
        .GroupBy(x => x.pID, x => x.action)
        .Where(g => new []{"A","E"}.Intersect(g).Count() == 2)
        .Select(g => g.Key);
    

    【讨论】:

      【解决方案2】:

      这应该会为您提供所需的内容 (Here is full DotNetFiddle Example of the below):

          string[] myList = new string[]{"A", "E"};
      
          var results = authors.Where(x => myList.Contains(x.ActionCode))
                              .GroupBy(x => x.ProcessId, x => x.ActionCode)
                              .Where(d => myList.All(dv => d.Contains(dv)))
                              .Select(x => new { ProcessId = x.Key, ActionCode = x.ToList()} ).ToList();
      

      【讨论】:

        猜你喜欢
        • 2018-08-27
        • 2020-07-30
        • 1970-01-01
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多