2016-04-25 166 views
0
的恒定值

我在下面的查询中收到此错误。我已经搜索了其他类似的链接,但不能得到这个工作:无法创建类型为

无法创建一个类型'匿名类型'的常量值。在此上下文中仅支持 基元类型或枚举类型。

var users = from a in GetUsers(EmployeeID) 
       group new { a } by new { a.EmployeeID } into g 
       select new UserMovement { EmployeeID = g.Key.EmployeeID }; 


    var resulttst = from s in _repository.GenericRepository<STG_WDUsers>().GetAll() 
        join u in users on s.Employee_ID equals u.EmployeeID 
        where s.EffectiveDate != null && s.EffectiveDate > dtSixMonths 
        group new { s } by new { s.Employee_ID, s.Business_Unit, s.First_Name, s.Last_Name } into g 
        orderby g.Key.Employee_ID, g.Min(m => m.s.EffectiveDate) 
        select new UserMovement 
        { 
         EffectiveDate = g.Min(m => m.s.EffectiveDate), 
         EmployeeID = g.Key.Employee_ID, 
         FirstName = g.Key.First_Name, 
         LastName = g.Key.Last_Name, 
         BusinessUnit = g.Key.Business_Unit, 
         PreviousBU = null 
        }; 
+0

我不知道它是否是问题的根源,但您似乎是在不必要地创建匿名类型。为什么你使用'group new {a} by new {a.EmployeeID}到g'中,而不是仅仅通过'将group.EmployeeID改成g'? –

+0

谢谢,我已经删除了多列,试图打破这个问题 - 对linq来说很新颖。 – jaykzoo

回答

1

,因为你使用的对象,users的本地序列,在被翻译成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)); 
+0

感谢Gert,帮助。 – jaykzoo

相关问题