2017-10-27 16 views
0

を使用して一つのテーブル上でグループの後のテーブルをJoning:は、私は2つのテーブルを持ってT SQL/LINQ

CREATE TABLE [dbo].[Employee_Reason](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [IdEmployee] [int] NOT NULL, 
    [IdReason] [int] NOT NULL, 
    [AverageServiceTime] [time](0) NULL, 
    [Skillset] [bit] NOT NULL, 
CONSTRAINT [PK_Employee_Reason] PRIMARY KEY CLUSTERED ([Id] ASC) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[Employee_Reason] WITH CHECK ADD CONSTRAINT [FK_Employee_Reason_Employee] FOREIGN KEY([IdEmployee]) 
REFERENCES [dbo].[Employee] ([Id]) 
GO 

ここで、th電子の従業員テーブルは次のようになります。

CREATE TABLE [dbo].[Employee](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [EmployeeId] [int] NOT NULL, 
    [FirstName] [nvarchar](20) NOT NULL, 
    [LastName] [nvarchar](40) NOT NULL, 
    [IdLocation] [int] NOT NULL, 
    [IdStatus] [int] NOT NULL, 
    [UserId] [nvarchar](450) NOT NULL, 
    [IsArchived] [bit] NULL, 
    [IdAssignedLocation] [int] NOT NULL, 
    [IdQueue] [int] NOT NULL, 
    [IdPosition] [int] NOT NULL, 
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED ([Id] ASC) ON [PRIMARY] 
) ON [PRIMARY] 

私はidreasonによってグループemployee_reasonにしたいし、従業員と、その後joinこのようなEmployee_Reason.idemployeeemployee.idを使用して:

List<SelfServeReason> skillsetReasons = 
    from reason in db.EmployeeReason 
    group reason by IdReason into reasonGroup 
    join employee in scheduleEmployees on reasonGroup.IdEmployee equals employee.Id 
    select new skillsetReason 
    { 
     id = reasonGroup.Id, 
     description = reasonGroup.Description, 
     estimatedWaitTime = min(employee.NextAvailableTime) – ConvertToCST(DateTime.Now) 
    }; 

私はこのようにそれを書かれています

select MAX(er.Id) 
from Employee_Reason er join Employee e on er.IdEmployee = e.id 
group by er.IdReason 

グループ化の方法がわからないemployee_reasonsとその後joinこのグループidempoyeeで始まります。

linqは正しくありません。誰かが正しいlinqを提案することができれば、linqは擬似コードになります。

解決策をお聞かせください。何がしたいことは、あなたが行うことができ、そのLINQクエリにSQLクエリsimmilarある場合

+0

グループ化する欄を指定しましたが、選択する列は指定しませんでした。そのlinqクエリにあるものと同じですか? –

+0

@GabrielRainhaはいlinq –

+0

でも同じものがありますが、linqは正しくありません。誰かが正しいlinqを提案することができれば擬似コードになります。 –

答えて

0

は:

select er.IdReason, MIN(e.NextAvailableTime) - GETDATE() 
from Employee_Reason er 
inner join Employee e on er.IdEmployee = e.id 
group by er.IdReason 

また、正しいLINQは、次のようになります。

var now = ConvertToCST(DateTime.Now); 
List<SelfServeReason> skillsetReasons = (
    from employee in scheduleEmployees 
    join reason in db.EmployeeReason on employee.Id equals reason.IdEmployee 
    group employee by reason.IdReason into reasonGroup 
    select new SelfServeReason 
    { 
     Id = reasonGroup.Key, 
     EstimatedWaitTime = reasonGroup.Min(p => p.NextAvailableTime).Subtract(now), 
    }).ToList(); 

はジャストで負担しますテーブルにそのような列を指定しなかったり、その列にReasonのようなテーブルがないため、クエリのDescriptionの選択を除外したことに気を付けてください。
また、提供しているテーブルにはEmployee.NextAvailableTimeという列はありませんので、linqクエリでそれを見ているのを忘れていると思います。
そして、少なくとも、そのSelfServeReasonクラスの仕様はありませんでした。そのため、私はあなたのモデルが持っていることを知っている列でそれを埋めていくつもりです。
そうでない場合は、この調整で質問を拡大してください。回答を編集します。

+0

linqに同じsqlを書きたいとしたら?私が書いたlinqは、実際のlinqではなく擬似コードであることを覚えておいてください。 –

+0

次に、そのクエリから選択したいものを正確に指定することをお勧めします。 Mineはlinqのものとほぼ同じことをしますが、NestAvailableTimeから現在の日付を引くことはできません。 –

+0

@AsifHameedちょうどlinqクエリが含まれ、答えが改善されました。見てみな。 –

関連する問題