2012-05-25 25 views
5

Tôi đang trong tuần đầu tiên thực tập lập trình mùa hè và đã được giao nhiệm vụ chuyển đổi các câu lệnh SQL Server 2008 sang C# bằng cách sử dụng LINQPad. Một khi tôi làm điều đó và làm cho nó hoạt động đúng, tôi có thể nhập nó vào VS và tinh chỉnh khi cần thiết.Chuyển đổi SQL CASE KHI phát biểu thành C#

Vấn đề là tôi đang chạy trên các câu lệnh SQL Tôi không biết cách chuyển đổi. Trong lớp C# của tôi, chúng tôi đã không chuyển đổi câu lệnh SQL thành C#, chúng tôi vừa tạo một biến chuỗi, gán câu lệnh SQL cho biến và sau đó gán biến cho một đối tượng OleDbCommand. Người cố vấn của tôi đã nghỉ một ngày cho một ngày cuối tuần dài và tôi khá tự mình và không biết phải làm gì và cần sự giúp đỡ. Có một vài chục như thế này và nếu tôi có thể xem làm thế nào để làm một tôi có thể tìm ra phần còn lại. Dưới đây là các câu lệnh SQL:

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

Tôi khá chắc chắn đây là một câu lệnh if dọc theo dòng:

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] 

Tôi đã cố gắng đoạn mã sau, mà tôi đã tìm được sẽ không làm việc nhưng cần phải bắt đầu từ đâu đó:

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

Tôi sẽ đánh giá cao đó là ai đó có thể chỉ cho tôi đúng hướng.

+3

+1 cho thực dping một số công việc. Vì vậy, rất ít lập trình viên mới arounod ở đây dường như làm điều đó. –

+2

@ Michael Todd: Tôi không thể học được nếu tôi để mọi người khác làm điều đó cho tôi. Không làm bất cứ điều gì không phải là một lựa chọn vì tôi muốn có một công việc với công ty này khi tôi tốt nghiệp. Thêm vào đó họ không trả tiền cho tôi. –

+0

Tuần nắm tay luôn là nỗi đau đớn nhất. ;) –

Trả lời

2

Something như thế này:

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

@ AD.Net: Cảm ơn sự giúp đỡ của bạn –

+0

Bạn được chào đón, nó chỉ là một mẹo với cú pháp –

Các vấn đề liên quan