簡體   English   中英

具有group by,having和where子句無效的C#LINQ查詢

[英]C# LINQ Query with group by, having and where clause invalid

我有以下Linq查詢,正在以下錯誤中。 我的問題是如何在where子句中使用T_EquipmentCompetency.Competency,但在group by或select列表中沒有它。 我對LINQ查詢還很陌生。 我在這里缺少什么嗎?

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

這是我得到的錯誤

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 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)

你弄錯了

select eq.CompetencyId   --- different spelling

sm.CompentencyID         

而在sql sql server中

where sm.CompentencyID in  (    select  CompentencyID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM