【问题标题】:Calculate fields according some criteria in linq projection [duplicate]根据linq投影中的一些标准计算字段[重复]
【发布时间】:2012-12-18 06:43:12
【问题描述】:

可能重复:
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

谢谢

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:
    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; }
    }
    

    【讨论】:

      【解决方案2】:

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

      您可以遵循的一种方法是,构建查询并编写 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,}
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多