【发布时间】:2021-05-08 12:08:46
【问题描述】:
我想从两个不同的 ChatMessage 和 ChatGroup 表中获取一些特定的列。 这样返回数据后只包含messageId、Message、SenderUserId、CreatedDate、ChatGroupId。
查询返回 ApplicationUser 和 ChatGroup 数据的所有信息,包括电子邮件、散列密码、user1、user2、ChatMessages 以及更多我不想要的信息。所以我尝试在实现中添加Select。
执行此操作会发生错误。
实施:
public IEnumerable<ChatMessage> GetMessageInChat(ChatModel model)
{
try
{
PutReadZero(model).Wait();
return _context.ChatMessages.Where(userID => userID.ChatGroup.Id == model.GroupId)
.OrderByDescending(m => m.CreatedDate)
.AsEnumerable()
.Reverse()
.Select(p => new
{
p.Id,
p.Message,
SenderUserId= p.SenderUser.Id,
p.CreatedDate,
ChatGroupId = p.ChatGroup.Id,
})
.ToList();
}
catch (Exception ex)
{
throw new NotImplementedException();
}
}
ChatMessage.cs :
namespace ProjectName.Models
{
public class ChatMessage
{
public int Id { get; set; }
public string Message { get; set; }
public string FileName { get; set; }
public DateTime CreatedDate { get; set; }
public ApplicationUser SenderUser { get; set; }
public ChatGroup ChatGroup { get; set; }
}
}
聊天组:
namespace ProjectName.Models
{
public class ChatGroup
{
public int Id { get; set; }
public virtual ApplicationUser User1 { get; set; }
public virtual ApplicationUser User2 { get; set; }
public int User1Unread { get; set; }
public int User2Unread { get; set; }
public DateTime CreatedDate { get; set; }
public virtual IEnumerable<ChatMessage> ChatMessages { get; set; }
}
}
ChatModel.cs :
namespace ProjectName
{
public class ChatModel
{
public string SenderId { get; set; }
public string ReceiverId { get; set; }
public string Message { get; set; }
public int GroupId { get; set; }
public DateTime CreatedDate { get; set; }
public IFormFile FileContent { get; set; }
}
}
错误:
无法将类型'System.Collections.Generic.List>'隐式转换为'System.Collections.Generic.IEnumerable
'。存在显式转换(您是否缺少演员表?)
【问题讨论】:
-
删除AsEnumerable,并正确选择返回ChatMessage
标签: c# asp.net-mvc linq asp.net-core entity-framework-core