无法创建类型的常量值

时间:2016-10-16 18:54:13

标签: c# linq

我遇到以下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?

1 个答案:

答案 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 (...)