首页新闻找找看学习计划

Linq问题

0
悬赏园豆:40 [已解决问题] 解决于 2013-04-12 14:05
/// <summary>
        /// 根据用户编号和是否已读标识获取该用户下的所有已读列表或未读列表
        /// </summary>
        /// <param name="userId">用户编号</param>
        /// <param name="isHasRead">bool,是否已读</param>
        /// <returns>已读或未读的实体对象列表</returns>
        public List<User_Policy> GetList(string userId, bool isHasRead)
        {
            List<User_Policy> userPolicyList = new List<User_Policy>();
            IQueryable<User_Policy> userPolicys = null;
            if (isHasRead)
            {
                // 已读列表
                userPolicys = (from userPolicy in _entityLibrary.User_Policy
                               where userPolicy.UserId == userId && userPolicy.IsReaded == true
                               group userPolicy by userPolicy.PolicyId into g
                               select new User_Policy
                               {
                                   UserId = userId,
                                   PolicyId = g.Select(userPolicy => userPolicy.PolicyId).First<Guid?>(),
                                   FirstReadDate = g.Min(userPolicy => userPolicy.FirstReadDate),
                                   LastReadDate = g.Max(userPolicy => userPolicy.FirstReadDate),
                                   IsReaded = isHasRead
                               });
            }
            else
            {
                // 已读列表
                userPolicys = from userPolicy in _entityLibrary.User_Policy
                              where userPolicy.UserId == userId && userPolicy.IsReaded == true
                              group userPolicy by userPolicy.PolicyId into g
                              select new User_Policy
                              {
                                  UserId = userId,
                                  PolicyId = g.Select(userPolicy => userPolicy.PolicyId).First<Guid?>(),
                                  FirstReadDate = g.Min(userPolicy => userPolicy.FirstReadDate),
                                  LastReadDate = g.Max(userPolicy => userPolicy.FirstReadDate),
                                  IsReaded = isHasRead
                              };
            }
            foreach (User_Policy userPolicy in userPolicys)
            {
                userPolicyList.Add(userPolicy);
            }
            return userPolicyList;
        }

这样会报错,如下:
我想知道这是为什么吗?被搞得很纠结,求解!

dotnet平台开发者的主页 dotnet平台开发者 | 初学一级 | 园豆:17
提问于:2013-04-11 10:39
< >
分享
最佳答案
0

错误提示很明白了,linq to ef 不支持用 select new 创建匿名类型,虽然 User_Policy 是实体类,但你的查询只返回部分的列,这是不允许,解决方法,先查询出符合条件的 User_Policy,再用 group by select new 等 创建匿名类型

收获园豆:20
geass.. | 小虾三级 |园豆:1777 | 2013-04-11 11:24
其他回答(3)
0

173844862.Net高级部落

辛巴 | 园豆:622 (小虾三级) | 2013-04-11 10:48
0

如果使用group by语句,则不需要select。这是之前学习时写的小例子http://www.cnblogs.com/QLJ1314/archive/2012/08/04/Linq.html 希望对你有所帮助吧

收获园豆:10
妍珊 | 园豆:1169 (小虾三级) | 2013-04-11 10:48
0

linq to EF 支持创建匿名, 你的 User_Policy 不是匿名又不是DbContext映射类型。

你可以ToList之后再转换。

收获园豆:10
Qlin | 园豆:2403 (老鸟四级) | 2013-04-11 12:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册