2011-06-13 204 views
1

首先我要感谢你在这件事情上的任何帮助。 我在做这个查询(LINQ到实体)Linq to Entities的问题查询

公共覆盖的IEnumerable执行(用户组userGroup表示) {

 return from a in _ctx.Activities.OfType<ResourceActivity>() 
       where userGroup.Users.Contains(a.User) 
       group a by new { a.User, a.Href } into fg 
       select new UserResourceActivityReturnValue 
       { 
        UserDBIdentity = fg.Key.User.DbId, 
        UserIdentity = fg.Key.User.Id, 
        UserName = fg.Key.User.Name, 
        ResourceName = fg.Key.Href, 
        ResourceAccess = fg.Count() 
       }; 

而且我有这样的错误:

“无法创建一个恒定值类型'Data.User'。在这种情况下,只支持原始类型(如Int32,String和Guid)。“

所以我把它改成这样:

公共覆盖的IEnumerable执行(用户组userGroup表示) {

 return from a in _ctx.Activities.OfType<ResourceActivity>() 
       from u in userGroup.Users 
       where a.User.DbId == u.DbId 
       group a by new { a.User, a.Href } into fg 
       select new UserResourceActivityReturnValue 
       { 
        UserDBIdentity = fg.Key.User.DbId, 
        UserIdentity = fg.Key.User.Id, 
        UserName = fg.Key.User.Name, 
        ResourceName = fg.Key.Href, 
        ResourceAccess = fg.Count() 
       }; 

而且我一直看到了同样的错误,请大家帮忙。

我的电子邮件地址是[email protected]

非常感谢

回答

0

的修复到原始查询:

return from a in _ctx.Activities.OfType<ResourceActivity>() 
     where userGroup.Users.Any(arg => arg.DbId == a.User.DbId) 
     group a by 
      new 
      { 
       UserId = a.User.Id, 
       UserDbId = a.User.DbId, 
       UserName = a.User.Name, 
       a.Href 
      } into fg 
     select new UserResourceActivityReturnValue 
     { 
      UserDBIdentity = fg.Key.UserDbId, 
      UserIdentity = fg.Key.UserId, 
      UserName = fg.Key.User.UserName, 
      ResourceName = fg.Key.Href, 
      ResourceAccess = fg.Count() 
     }; 

的问题是,你在使用Contains实体User并在GroupBy