Select 来自 Sql 服务器的不同记录 Entity Framework 在 .Net Core 5 中使用存储库模式

Select Distinct Records From Sql Server With Entity Framework Using Repository Pattern In .Net Core 5

我正在将存储库模式与 .Net Core Web 应用程序一起使用,该应用程序与 .Net Core Web API 控制器方法从 Sql 服务器获取记录。

在 Web API 控制器方法中,我在存储库中调用一个方法,该方法必须 return 基于 Sql 服务器数据库中特定字段的不同消息列表像 PhoneNumberTo。但是,当我 return 将列表返回到 API 方法时,似乎出现了一些转换错误。这是调用存储库的 Web API 控制器方法:

    [HttpGet]
    [Route("GetUniqueMessages")]
    public IActionResult GetUniqueMessages()
    {
        var messages = _unitOfWork.MessagesViewModel.GetDistinctMessages();
        return new JsonResult(messages);
    }

这是我的存储库方法,它必须 return 不同消息的列表:

     public IEnumerable<Message> GetDistinctMessages()
     {    
            List<Message> result = _context.Messages.Select(m => m.PhoneNumberTo).Distinct().ToList();
            return result;
     }

这是我在存储库方法上收到的错误消息的屏幕截图。

更新:

这是我的留言 class:

任何专家建议将不胜感激。

你有两个选择。

如果您只需要获取 phone 个号码的列表

public IEnumerable<string> GetDistinctMessages()
{    
    return _context.Messages.Select(m => m.PhoneNumberTo).Distinct().ToArray();
}

如果您需要一个消息列表,您不能拥有所有不同的字段,就像这样

 public IEnumerable<Message> GetDistinctMessages()
 {    
       return _context.Messages.Distinct().ToArray();
 }

我提供给你获取 MessageTo MessageFrom 和 MessageText 看看区别

public IEnumerable<Message> GetDistinctMessages()
 {    
       return _context.Messages
                   .GroupBy(p => new {p.MessageTo, p.MessageFrom} )
                   .Select(g => new Message 
                     { 
                         MessageTo = g.Key.MessageTo, 
                         MessageFrom = g.Key.MessageFrom, 
                        MessageText= g.MessageText
                   }).ToArray();                                            

您可以使用此查询并根据需要添加任意数量的字段

你仍然可以保留现有的操作,但我推荐这个

 [HttpGet]
    [Route("GetUniqueMessages")]
    public IActionResult GetUniqueMessages()
    {
        var messages = _unitOfWork.MessagesViewModel.GetDistinctMessages();
        return Ok(messages);
    }