转换SQL CASE WHEN语句转换成C#(Converting SQL CASE WHEN st

2019-09-17 12:21发布

我对我的一个夏天的编程实习的第一周,一直负责将SQL Server 2008条中语句转换为C#中使用LINQPad 。 一旦我做到这一点,让它正常工作,我可以将其输入VS根据需要调整。

问题是,我在不同SQL语句运行,我不知道如何转换。 在我的C#类,我们没有转换SQL语句转换为C#,我们就创建了一个字符串变量,分配的SQL语句变量,然后分配到的变量的OleDbCommand对象。 我的导师了一天假的长周末,我几乎对我自己和无能做什么,需要一些帮助。 有几个像这样的打的,如果我可以看到如何做一个我可以计算休息了。 下面是SQL语句:

,[hrs].{Hours] - SUM(
  CASE 
    WHEN [UnitState].[UnitStateTye] <> 'ACTIVE' 
      THEN [Allocation].[AllocatedEnergyMwh] 
    ELSE 0 
  END 
/ CAST([Unit].[NetDependableCapacity] AS FLOAT)) AS SH

我敢肯定,这就是线沿线的if语句:

if [UnitState].[UnitStateType] does not equal active 
then SH equals [hrs].[Hours] minus the the sum of
  [Allocation].[AllocatedEnergyMwh] / (float)[Unit].[NetDependableCapacity].  
else 
  SH = [hrs].[Hours]

试过我下面的代码,我想通不会是去上班,但开始的地方需要:

var results = 

    (from v in VDimUnit     
        join vf in VFactEnergyAllocation on v.UnitKey equals vf.UnitKey
        join vd in VDimGadsEvent on vf.GadsEventKey equals vd.GadsEventKey
        join vt in VDimTime on vf.TimeKey equals vt.TimeKey 
        join vus in VDimUnitState on vf.UnitKey equals vus.UnitKey
    where vd.GadsEventEndTime.Year == 2011 && v.UnitId == "THL3"
    group vf by new {vus.UnitStateType, vf.AllocatedEnergyMwh v.NetDependableCapacity,
        vt.QuarterNum} into groupItem       
    select new {groupItem.Key.QuarterNum, SUM1 = groupItem.Sum(x=> (float)x.AllocatedEnergyMwh /
        groupItem.Key.NetDependableCapacity)}).ToArray();

var resultHours = 
    (from v in VDimTime
    group v by v.QuarterNum into groupItem
    select new {Hours = groupItem.Count(), groupItem.Key}).ToDictionary(x=> x.Key, x=> x.Hours);

var finalResults = 
    (from r in results
    select new {SH_IF_NOT_ACTIVE = resultHours[r.QuarterNum] - r.SUM1,
        Hours = 
        SH_IF_ACTIVE = resultHours[r.QuarterNum]});

    if (SH != "ACTIVE")
    { 
        SH_IF_NOT_ACTIVE;
    }
    else
    {
        SH_IF_ACTIVE;
    }   

我将不胜感激是有人可以指向我的方向是正确的。

Answer 1:

事情是这样的:

Hours = condition ? code when true : code when false;


文章来源: Converting SQL CASE WHEN statement into C#