0

可能重复:
linq case 语句

请考虑这种情况:

我有这样的功能:

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;
}

我如何switch case在 linq 投影中使用它?

谢谢

4

2 回答 2

0

它应该像内联和连接查询的组合。请说出确切的场景或您写的查询。

您可以遵循的一种方法是,构建查询并编写 switch case 并将您的查询包含在其中.. 像,

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,}

` 像这种类似的方式可以完成..无论如何查询将执行一次,是最简单的方法

于 2012-12-18T06:48:43.977 回答
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; }
}
于 2012-12-18T07:04:33.310 回答