2014-03-31 30 views
0

以下是我在LINQ上对数据表进行的操作。Linq DataTable重用级联变量

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

任何方式我只能做一次字符串concat并在LINQ中使用它两次?

回答

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