Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法创建类型为的常量值_C#_Linq - Fatal编程技术网

C# 无法创建类型为的常量值

C# 无法创建类型为的常量值,c#,linq,C#,Linq,我在下面的查询中收到此错误。我搜索了其他类似的链接,但无法实现此功能: 无法创建“匿名类型”类型的常量值。只有 在此上下文中支持基元类型或枚举类型 var users=来自GetUsers(EmployeeID)中的 通过new{a.EmployeeID}将new{a}分组到g中 选择新用户移动{EmployeeID=g.Key.EmployeeID}; var resulttst=来自_repository.GenericRepository().GetAll()中的s 在s.Employee

我在下面的查询中收到此错误。我搜索了其他类似的链接,但无法实现此功能:

无法创建“匿名类型”类型的常量值。只有 在此上下文中支持基元类型或枚举类型

var users=来自GetUsers(EmployeeID)中的
通过new{a.EmployeeID}将new{a}分组到g中
选择新用户移动{EmployeeID=g.Key.EmployeeID};
var resulttst=来自_repository.GenericRepository().GetAll()中的s
在s.Employee_ID等于u.EmployeeID上加入u用户
其中s.EffectiveDate!=空(&s.EffectiveDate>dt六个月
按新的{s.Employee\u ID,s.Business\u Unit,s.First\u Name,s.Last\u Name}将新的{s}分组到g中
orderby g.Key.Employee_ID,g.Min(m=>m.s.EffectiveDate)
选择新用户移动
{
有效日期=g.Min(m=>m.s.EffectiveDate),
EmployeeID=g.Key.Employee\u ID,
FirstName=g.Key.First_Name,
LastName=g.Key.Last_Name,
BusinessUnit=g.Key.Business\u Unit,
PreviousBU=null
};

之所以出现此错误,是因为在转换为SQL的LINQ查询中使用了对象的本地序列,
用户。但是,
UserMovement
对象没有翻译。您可以在LINQ中将本地序列用于SQL后端,但前提是它们包含基元值:

var empIds = (from a in GetUsers(EmployeeID)
              select a.EmployeeID).Distinct();
from s in _repository.GenericRepository<STG_WDUsers>().GetAll()
                     .Where(u => empIds.Contains(u.Employee_ID));
var empIds=(来自GetUsers(EmployeeID)中的
选择a.EmployeeID).Distinct();
从_repository.GenericRepository().GetAll()中的s
其中(u=>empIds.Contains(u.Employee_ID));

我不知道这是否是问题的根源,但您似乎在不必要地创建匿名类型。为什么您要使用
将new{a.EmployeeID}按new{a.EmployeeID}分组为g
而不是仅将a.EmployeeID分组为g
?谢谢,我已经删除了多个列来尝试分解这个问题-对于linq来说是非常新的。谢谢Gert,这很有帮助。
var empIds = (from a in GetUsers(EmployeeID)
              select a.EmployeeID).Distinct();
from s in _repository.GenericRepository<STG_WDUsers>().GetAll()
                     .Where(u => empIds.Contains(u.Employee_ID));