【问题标题】:Split field a string and compare each value with string linq c#拆分字段字符串并将每个值与字符串 linq c# 进行比较
【发布时间】:2021-05-10 23:22:27
【问题描述】:

我正在尝试使用 LINQ 在 DataTable 中搜索三个字符串列[start_date, end_date, expected_visits],但第三列有很多行,如图所示

所以我用\n 拆分第三个,但我想循环日期以将其与 txtSearchYear 的文本进行比较并将结果作为 DataTable 返回,当我尝试使用 ForEach 时,如我的代码所示,出现错误我说A local or parameter named 'e' cannot be declared in this scope because that name is used in an enclosing local scope to define a local 这是我的代码...

var tblResult =
    tbl
        .AsEnumerable()
        .Where(x =>
            x.Field<string>("start_date").Substring(0, 4).Equals(txtSearchYear.Text.Trim())
            || x.Field<string>("end_date").Substring(0, 4).Equals(txtSearchYear.Text.Trim())
            || x.Field<string>("expected_visits").Split('\n').ToList().ForEach((e) =>
            {
                e.Substring(0, 4).Equals(txtSearchYear.Text.Trim())
            }));

if (tblResult.Any())
{
    GetData(tblResult.CopyToDataTable());
}
else
{
    DGVData.Rows.Clear();
}

【问题讨论】:

  • 你能不能把ForEach中的e改成不同的名字?你不理解的错误是什么?
  • 我看了更深一点,您的代码无效。你在用什么ForEach?这是错误的。您应该拆分Environment.NewLine,然后使用.Any 检查是否有任何行与您的搜索文本匹配。
  • @Enigmativity 非常感谢,当我使用.Any时问题解决了

标签: c# winforms linq datatable


【解决方案1】:

我会直接比较年份并在 lambda 中使用年份 (int) 并尝试将日期处理为日期列表或日期数组,而不是比较子字符串,例如

DateTime now = DateTime.Now;

      int year = -1; 
      if (!Int32.TryParse(txtSearchYear.Text.Trim(), out year) || year < 1900)
      {
        throw new InvalidProgramException($"Year {year} isn't valid for us.");
      }
      
      List<DateTime> dates = new List<DateTime>();
      dates.Add(now);
      dates.Add(now.Subtract(new TimeSpan(0, 10, 10)));
      dates.Add(now.Subtract(new TimeSpan(0, 20, 20)));
      /* ... */

      var myList = dates.AsEnumerable().Where(x => x.Year == year).ToList();
      Action<DateTime> action = new Action<DateTime>(MyDelegateAction);
      myList.ForEach(e => MyDelegateAction(e));

    }

    private static void MyDelegateAction(DateTime date) { /* do somewhat */; }

亲切的问候,海因里希。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2020-07-01
    • 2016-10-17
    • 2020-04-15
    相关资源
    最近更新 更多