2017-04-20 13 views
0

以下のエラーが発生するLinqクエリがあります。私の質問は、where句でT_EquipmentCompetency.Competencyを使用する方法ですが、group byまたはselectリストでは使用できません。私はLINQクエリにかなり新しいです。私がここで紛失しているものがありますか? C#LINQグループ化、having、where句が無効なクエリ

using (EntitiesModel dbContext = new EntitiesModel()) 
     { 
      var competencyForMachine = (from eq in dbContext.T_Equipmentcompetencies 
       where eq.MachineId == machineId 
       select eq.CompetencyId); 

      var competencyForEmployees = (from sm in dbContext.T_OHS_Skillsmatrices 
       join em in dbContext.T_Employees on sm.EmployeeID equals em.EmployeeID 
       where competencyForMachine.Contains(sm.CompentencyID) 
       group sm by new {sm.EmployeeID,em.FirstNameSTR,em.LastNameSTR} into g 
       where g.Count() == competencyForMachine.Count() 
       select new {g.Key.EmployeeID, g.Key.FirstNameSTR,g.Key.LastNameSTR}); 

      foreach(var employee in competencyForEmployees) 
      { 
       RadMenuItem employeeItem = new RadMenuItem { Text= employee.FirstNameSTR + " " + employee.LastNameSTR, Value = employee.EmployeeID.ToString()}; 
       Item.Items.Add(employeeItem); 
      } 
     } 

この

は、私はあなたがそれを

select eq.CompetencyId --- different spelling 

sm.CompentencyID   

をmispelled得た、SQL Serverの作品

declare @MachineId int = 1      
select sm.EmployeeID,em.FirstNameSTR,em.LastNameSTR 
from T_OHS_SkillsMatrix sm 
inner join T_Employees em on sm.EmployeeID = em.employeeId 
where sm.CompentencyID in ( select CompetencyID 
          from T_EquipmentCompetency 
          where MachineId = @machineId 
         ) 
group by sm.EmployeeID,em.FirstNameSTR,em.LastNameSTR 
having count(*) = (select count(*) from T_EquipmentCompetency where MachineId = @MachineId) 
+0

私は以下に説明するスペルミスを修正しましたが、私はまだ同じ問題を抱えています。 –

答えて

1

をエミュレートしようとしています、私は

Telerik.OpenAccess.RT.sql.SQLException: Column 
'dbo.T_EquipmentCompetency.CompetencyId' is invalid in the select list 
because it is not contained in either an aggregate function or the GROUP BY clause. 

SQLを取得していますエラーですSQLのSQLサーバーでは

where sm.CompentencyID in ( select CompentencyID 
+0

ありがとう私はスペルミスを修正しました。問題は依然として存在し、問題は残っています。私はまだSQL Serverで結果が得られていますが、LINQ C# –

+0

で上記のエラーが発生しました。更新されたスクリプトを投稿できます – maSTAShuFu

+0

エラーは同じです。私は、SQL Serverスクリプトのスペルミスを編集しました。明らかに、LINQクエリではsmとeqの間に2つの異なるスペルがありますが、それらはデータベーステーブルの列を反映しています。 –