2012-12-18 134 views
0

可能重复:
linq case statement计算领域

请考虑这样的情景:

我有这样的功能:

private void MyFunction(byte Period) 
{ 
    ... 

我在这样的数据库中有一个表格:

... F008 F009_1 F009_2 F009_3 F009_4 F009_5 F009_6 F009_7 F009_8 ... 

------------------------------------------------------------------------------------------------- 

在函数体中我想做一些计算。

var MyCalculation = from r in ent.MyTable 
        group r by new { r.F000 } into grp 
        select new 
          { 
           F008 = grp.Sum(o => o.F008) 
           F009 = ????? 

问题是在F009情况下,我应该在LINQ投影做到这一点:

switch(Period) 
{ 
    case 1: 
     F009 = (Sum of F009_1) + (Sum of F009_2); 
     break; 
    case 2: 
     F009 = (Sum of F009_3) + (Sum of F009_4); 
     break; 
    case 3: 
     F009 = (Sum of F009_5) + (Sum of F009_6); 
     break; 
    case 4: 
     F009 = (Sum of F009_7) + (Sum of F009_8); 
     break; 
} 

我怎么能在LINQ投影用这个switch case

谢谢

回答

0
var groupQuery = ent.MyTable.GroupBy(r => r.F0000); 
IEnumerable<Result> query; 

switch(Period) 
{ 
    case 1: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_1 + r.F009_2) 
      }; 
     break; 
    case 2: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_3 + r.F009_4) 
      }; 
     break; 
    case 3: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_5 + r.F009_6) 
      }; 
     break; 
    case 4: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_7 + r.F009_8) 
      }; 
     break; 
} 

var MyCalculation = query.ToList(); 

而且你的DTO:

public class Result 
{ 
    // provide actual data types 
    public int F008 { get; set; } 
    public int F009 { get; set; } 
} 
0

它应该像内联和联合查询组合。 请说出确切的情况或您写的查询。你可以按照

一种方法是,建立查询和写入开关的情况下,包括在它乌尔查询.. 一样,

case 1: var MyCalculation = from r in ent.MyTable 
        group r by new { r.F000 } into grp 
        select new 
          { 
           F008 = grp.Sum(o => o.F008) 
           F009 =F009_1+F009_2,} 

` 类似的这样的方式可以做到..反正查询将执行一次,也是最简单的方法