Linq DataTable 重用串联变量

本文关键字:变量 DataTable Linq | 更新日期: 2023-09-27 17:56:02

这是我在 LINQ 中对数据表执行的操作。

var result = resTable.Rows.Where(r => Map.ContainsKey(string.Concat(r[HeaderCol].ToString().Trim(),dot,r[FooterCol].ToString().Trim(),dot,r[TypeCol].ToString().Trim())))
                                              .GroupBy(r => string.Concat(r[HeaderCol].ToString().Trim(), dot, r[FooterCol].ToString().Trim(), dot, r[TypeCol].ToString().Trim()))
                                              .ToDictionary(g => g.Key,
                                                            g => g.GroupBy(r => DateTime.FromOADate((double)r[DateCol]))
                                                                  .ToDictionary(c => c.Key,
                                                                                c => c.Select(r => new ResultObj(DateTime.FromOADate((double)r[ResultDateCol]), new Decimal((double)r[PriceCol])))
                                                                                      .ToList()));

我正在从列值创建一个键,也需要在分组中使用它。

string.Concat(r[HeaderCol].ToString().Trim(), dot, r[FooterCol].ToString().Trim(), dot, r[TypeCol].ToString().Trim())

有什么方法我可以只做一次字符串连接并在 LINQ 中使用它两次?

Linq DataTable 重用串联变量

我不知道为什么有必要,但在这里你想要。

var result = resTable.Rows.Select(r => new {r, res = string.Concat(r[HeaderCol].ToString().Trim(),dot,r[FooterCol].ToString().Trim(),dot,r[TypeCol].ToString().Trim())})
     .Where(r => Map.ContainsKey(r.res))
     .GroupBy(r => r.res)
          .ToDictionary(g => g.Key,
              g => g.GroupBy(r => DateTime.FromOADate((double)r.r[DateCol]))
                    .ToDictionary(c => c.Key,
                            c => c.Select(r => new ResultObj(DateTime.FromOADate((double)r.r[ResultDateCol]), new Decimal((double)r.r[PriceCol])))
                                .ToList()));