使用存储库模式从Service返回通过ID选择的单个实体

时间:2013-06-18 08:57:57

标签: c# linq-to-entities repository-pattern

我正在研究ASP.NET MVC3应用程序。我想在我的服务中创建一个方法,它只返回我在我调用方法的地方提供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>的返回类型,然后在return语句的末尾添加ToList()。但我不期待一个List,我期待一个记录而不是记录列表。

那么有没有办法,如果有,我怎么能只返回一个实体而不是List,只有一个项目,这是我现在能想到的?

3 个答案:

答案 0 :(得分:2)

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

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

如果有多个实体具有相同的ID。

答案 1 :(得分:1)

你需要这个

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

答案 2 :(得分:1)

使用FirstOrDefault

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

如果没有包含null的文档,则会返回Id