LINQ-SQL을 사용하여 코드를 작성했지만 특정 작업을 수행 할 수는 있지만 문제는 변환 할 수 없다는 것입니다. 누구든지 내게 손을 줄 수 있습니까? 여기 SQL 쿼리를 엔터티로 LINQ로 변환
감사
쿼리INSERT
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.Employe (
Id int NOT NULL PRIMARY KEY,
Name varchar(10) NOT NULL
);
CREATE TABLE dbo.Customer (
Id int NOT NULL PRIMARY KEY,
Name varchar(10) NOT NULL
);
CREATE TABLE dbo.Movement (
Id int NOT NULL IDENTITY PRIMARY KEY,
EmployeeId int NOT NULL,
CustomerId int NOT NULL,
Data date NOT NULL,
Time int NOT NULL,
SpecialCost decimal(18,4) NULL
);
CREATE TABLE dbo.EmployeeCost (
EmployeeId int NOT NULL,
Data date NOT NULL,
Value decimal(18,4) NOT NULL
);
GO
INSERT INTO dbo.Customer
VALUES (1, 'Cli1'), (2, 'Cli2'), (3, 'Cli3');
INSERT INTO dbo.Employe
VALUES (1, 'Mirko'), (2, 'Andrea');
INSERT INTO dbo.EmployeeCost
VALUES (1, '20110101', 1), (1, '20110701', 1.5), (1, '20120101', 2);
INSERT INTO dbo.EmployeeCost
VALUES (2, '20110101', 1), (2, '20120101', 1.3);
INSERT INTO dbo.Movement
VALUES (1, 1, '20110301', 2, NULL)
, (2, 1, '20110501', 1, NULL)
, (1, 1, '20110801', 1, NULL)
, (2, 1, '20111001', 1, NULL)
, (2, 1, '20120201', 1, 0.5);
GO
지금 QUERY
USE tempdb;
GO
WITH cte AS (
SELECT c.EmployeeId, c.Data, c.Value
, ROW_NUMBER() OVER (PARTITION BY EmployeeId ORDER BY Data) AS [r]
FROM dbo.EmployeeCost c
),
cteCost AS (
SELECT ec.EmployeeId, ec.Data, ec.Value
, ISNULL(DATEADD(DAY, -1, c.Data), '20991231') AS NextDate
FROM cte ec
LEFT JOIN cte c ON ec.EmployeeId = c.EmployeeId
AND c.r = ec.r +1
)
SELECT c.Id, c.Name
, m.Data, d.Name, m.Time AS [Time], ec.Value AS [Cost per Hour], m.SpecialCost
, m.Time * ISNULL(m.SpecialCost, ec.Value) AS [Employe Cost]
FROM dbo.Customer c
JOIN dbo.Movement m ON m.CustomerId = c.Id
JOIN dbo.Employe d ON m.EmployeeId = d.Id
JOIN cteCost ec
ON ec.EmployeeId = m.EmployeeId
AND m.Data BETWEEN ec.Data AND ec.NextDate;
GO
이 사람이 나를 도울 수있다? 감사합니다
편집 : 결과 쿼리
--<----------------
Id Customer Data Employe Time Cost per hour Total Cost
1 Cli1 2011-03-01 Mirko 2 1.0000 2.0000000000
1 Cli1 2011-05-01 Andrea 1 1.0000 1.0000000000
1 Cli1 2011-08-01 Mirko 1 1.5000 1.5000000000
1 Cli1 2011-10-01 Andrea 1 1.0000 1.0000000000
1 Cli1 2012-01-15 Mirko 1 2.0000
1 Cli1 2012-02-01 Andrea 1 1.3000 0.5000000000
와 함께 할 것 같은
편집
그런 다음 모델이지도보기. 보기/저장 프로 시저를 만들거나 수동으로 SQL 쿼리를 실행하거나 먼저 로컬 컴퓨터에 데이터를 가져 와서 linq를 개체에 사용할 수 있습니다. – Polity
이해합니다. 내 쿼리에서 cte 값을 삭제하면 엔티티로 linq로 변환 할 수 있습니까? – Mirko
EF /와 Linq를 조합하여 쿼리를 개체와 비슷하게 만들 수 있습니다. 그러나 성능 차이는 엄청납니다 (EF는 PARTITION BY를 지원하지 않으므로 수동으로해야합니다). 원하는 결과에 대한 추상적 인 설명을 제공하면이를 기반으로 예제를 만들 수 있습니다. – Polity