users类型为UserDto[],members类型为IQueryable<Member>,代码片段如下:
var users = ucService.GetUsersByBlogIds(blogIds); return from m in members join u in users on m.BlogId equals u.BlogId orderby m.DateAdded descending select new MemberDto { BlogUrl = u.BlogUrl, RealName = m.RealName, MemberId = m.MemberId, StudentNo = m.StudentNo };
上述代码会抛异常:Unable to create a constant value of type 'xxx.UserDto'. Only primitive types or enumeration types are supported in this context.
将members.ToList()虽然可以解决这个异常,但数据量大的话这样做就不太合理,请问有没有什么方法可以让结果返回IQueryable?
不能.除非你前面返回的也是一个iqueryable.你这是不知道什么是iqueryable..才会有这种想法...
查一下吧
一个blogId对应多个user吗?
一个blogId对应一个user,通过blogIds获取的是不同的用户(UserDto[])
@JoiWilliam: 那就取users的中第一条数据,作为查询条件。
也就是说用简单类型。
@JoiWilliam:
var users = ucService.GetUsersByBlogIds(blogIds); var user = users.FirstOrDefault(); //todo:判空 return members.Where ( m=>m.BlogId == user.BlogId ) .OrderBy(……).Select ( u=>new MemberDto() { BlogUrl=user.BlogUrl, …… } );
@蝌蝌: 我返回IQueryable是需要做分页的
@JoiWilliam:这个返回的就是IQueryable啊
@蝌蝌: 不太明白,users.FirstOrDefault()的意义是什么呢?这样后面再.Select user的值不就是固定的了?