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.
+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 đó. –
@ 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. –
Tuần nắm tay luôn là nỗi đau đớn nhất. ;) –