为什么在我的存储库中找不到查找?

时间:2013-12-04 18:27:54

标签: c# asp.net-mvc asp.net-web-api repository

使用本文作为指南here 我正在尝试将 GET 方法添加到我的存储库代码中,该代码将根据 ID 返回一个“记录”。但是给出了示例代码:

public Product Get(int id)
{
    return products.Find(p => p.Id == id);
}

...适应我的班级类型时:

public Platypus Get(int id)
{
    return platypi.Find(p => p.Id == id);
}

...将无法编译,因为找不到“查找”;并且IDE的上下文菜单中也没有“解析”。

尝试编译的错误信息是"HandheldServer.Models.Platypus does not contain a definition for 'Find'*"

但为什么[sh,w]呢?文章中相应的类没有定义Find方法,要么...... ???

3 个答案:

答案 0 :(得分:1)

在您关联的教程中,products的类型为List<Product>。并List<T> does, in fact, have a Find()` method

根据您看到的错误消息,platypi属于HandheldServer.Models.Platypus类型,它似乎是模型的单个实例,而不是该模型的集合。除非在模型上定义Find(),否则任何单个实例都不会使用该方法。 (也不应该......在一个实例中真的没有“找到”。)

简而言之,您的platypi对象应该是Platypus对象的集合,而不是单个实例。至少如果它与该教程中的存储库实现保持一致。

答案 1 :(得分:1)

在示例代码中,产品是List<Product>Find是通用集合的标准method

答案 2 :(得分:0)

这对我来说是一个愚蠢的错误(我应该更清楚/更清楚地思考)。所以这是有效的:

public InventoryItem Get(int id)
{
    return inventoryItems.Find(i => 0 == (String.Compare(i.Id, id.ToString())));
}