我遇到以下linq查询的问题:
conv.ConversationUsers = await (from cu in db.ConversationUsers
where conversationCreationDto.Users.Any(u => cu.UserId == u.UserId)
select cu).Include(u => u.Conversation).Include(u => u.User).ToListAsync();
conversationCreationDto.Users
是User对象的本地集合。 db.ConversationUsers
是一个db表
返回的错误:
“无法创建类型'DM.DTO.UserDTO'的常量值。在此上下文中仅支持基本类型或枚举类型。”
我明白我需要改变比较的顺序,我需要说'cu包含任何这些ID',但我不能这样做,因为cu不是一个集合。有没有办法让我成为一个我可以做的收藏品.Any on?
答案 0 :(得分:2)
将conversationCreationDto.Users
项目List<int>
加入查询之外的UserIds
,并使用Contains
代替Any
:
var ids = conversationCreationDto.Users.Select(u => u.UserId).ToList();
conv.ConversationUsers = await (from cu in db.ConversationUsers
where ids.Contains(cu.UserId)
select cu).Include(u => u.Conversation).Include(u => u.User).ToListAsync();
这应该会在生成的SQL中产生WHERE UserId IN (...)
。