Linq DataTable重用连接变量

时间:2014-03-31 23:33:24

标签: c# linq

以下是我在数据表上的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中使用它两次吗?

1 个答案:

答案 0 :(得分:0)

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

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()));