2012-05-25 15 views
5

में स्टेटमेंट जब मैं ग्रीष्मकालीन प्रोग्रामिंग इंटर्नशिप के अपने पहले सप्ताह में हूं और LINQPad का उपयोग कर SQL सर्वर 2008 कथन को C# में परिवर्तित करने के लिए कार्यरत हैं। एक बार ऐसा करने के बाद और इसे ठीक से काम करने के बाद, मैं इसे वीएस में दर्ज कर सकता हूं और आवश्यकतानुसार ट्विक कर सकता हूं।एसक्यूएल केस को कनवर्ट करना सी #

समस्या यह है कि मैं SQL कथन में चल रहा हूं, मुझे नहीं पता कि कैसे परिवर्तित करना है। मेरे सी # कक्षा में हमने एसक्यूएल कथन को सी # में परिवर्तित नहीं किया है, हमने अभी एक स्ट्रिंग वैरिएबल बनाया है, एसक्यूएल कथन को वैरिएबल में असाइन किया है और फिर वैरिएबल को ओलेडीबी कॉमांड ऑब्जेक्ट में असाइन किया है। मेरे सलाहकार ने लंबे सप्ताहांत के लिए दिन बंद कर लिया और मैं अपने आप पर बहुत अधिक हूं और क्या करना है और कुछ मदद की ज़रूरत है। इस तरह के दो दर्जन हैं और यदि मैं देख सकता हूं कि एक कैसे करना है, तो मैं बाकी को समझ सकता हूं।

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] 

मैं निम्नलिखित कोड है, जो मैं समझ काम करने के लिए नहीं जा रहा था की कोशिश की:

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

मैं बहुत यकीन है कि यह की तर्ज पर एक अगर बयान है कर रहा हूँ: यहाँ एसक्यूएल बयान है लेकिन कहीं भी शुरू करने की आवश्यकता है:

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

मैं सराहना करता हूं कि कोई मुझे सही दिशा में इंगित कर सकता है।

+3

+1 वास्तव में कुछ काम dping के लिए। ऐसा लगता है कि यहां कुछ नए प्रोग्रामर अरुणोड ऐसा करते हैं। –

+2

@ माइकल टोड: मैं नहीं सीख सकता कि क्या मैं हर किसी को यह मेरे लिए कर रहा हूं। कुछ भी नहीं करना एक विकल्प नहीं है क्योंकि मैं स्नातक होने पर इस कंपनी के साथ नौकरी चाहता हूं। इसके अलावा वे मुझे पेंच करने के लिए भुगतान नहीं करते हैं। –

+0

मुट्ठी सप्ताह हमेशा सबसे दर्दनाक होता है। ;) –

उत्तर

2

कुछ इस तरह:

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

@ एडी.Net: आपकी मदद के लिए धन्यवाद –

+0

आपका स्वागत है, यह सिंटैक्स के साथ सिर्फ एक चाल है –

संबंधित मुद्दे