视图/控制器操作不是放置业务逻辑的最佳位置。尝试在服务中使用三种方法,即使这意味着一些额外的代码。您已决定使用 DTO 来实现非常好的项目。您可以采取的一种方法是创建一个私有方法以从存储库中将 DTO 获取为 IQueryable 并通过公共方法公开它作为示例
// DTOs
public class MessageSummaryADto
{
public int MessageId { get; set; }
public string Title { get; set; }
}
public class MessageSummaryBDto : MessageSummaryADto
{
public string Description { get; set; }
}
// public methods
public int GetMessageCount()
{
return GetMessageSummary().Count();
}
public IQueryable<MessageSummaryADto> GetMessageSummaryADto()
{
return GetMessageSummary().Select(m => new MessageSummaryADto { MessageId = m.MessageId, Title = m.Title });
}
public IQueryable<MessageSummaryBDto> GetMessageSummaryBDto()
{
return GetMessageSummary();
}
// the private method
private IQueryable<MessageSummaryBDto> GetMessageSummary()
{
return yourMessageRepository.Select(m =>
new MessageSummaryBDto {
MessageId = m.MessageId,
Title = m.Title,
Description = m.Description
}
);
}
如果您不是 IQueryable 的粉丝,您可以将 dto 公开为 IList
祝你好运