返回使用Repository模式的服务中按ID选择的单个实体

本文关键字:ID 选择 实体 单个 服务 Repository 模式 返回 | 更新日期: 2023-09-27 18:18:55

我在做ASP。NET mvc应用程序。我想在我的服务中创建一个方法,它只返回我从调用该方法的地方提供的具有id的实体。

在我的服务DocumentService中,我写了以下简单的方法:

public Documents GetDocById(long id)
{
    return DocumentsRepository.All().Where(d => d.Id == id);
}

因为我只想要一个实体,所以我决定将方法的返回类型设置为称为Documents的实体的类型。这段代码得到的错误是:

Cannot implicitly convert type "System.Linq.IQueryable<DataAccess.Documents> to DataAccess.Documents.

这是合乎逻辑的。但是想想我该怎么做才能把它转换成我想要的类型,我发现自己遇到了问题。例如,我可以将方法的返回类型设置为List<Documents>,然后在返回语句的末尾添加ToList()。但我不期待一个List,我期待一个记录,而不是记录的列表。

那么是否有一种方法,如果有,我如何才能只返回一个实体,而不是只有一个项目的列表,这是我现在能想到的?

返回使用Repository模式的服务中按ID选择的单个实体

return DocumentsRepository.All().SingleOrDefault(d => d.Id == id);

return DocumentsRepository.All().FirstOrDefault(d => d.Id == id);

你需要这个

public Documents GetDocById(long id)
{
    return DocumentsRepository.All().FirstOrDefault(d => d.Id == id);
}

使用FirstOrDefault:

return DocumentsRepository.All().Where(d => d.Id == id).FirstOrDefault();

如果没有给定Id的文档,则返回null