需要帮助搞清楚这个C#代码的作用

时间:2013-11-10 00:40:43

标签: c# asp.net

我正在浏览asp.net和C#的教程,作者使用了一些我想要了解的代码。我知道它的作用,但我只想确定。

 public IQueryable<Category> GetCategories()
    {
        var db = new WingtipToys.Models.ProductContext();
        IQueryable<Category> query = db.Categories;
        return query;
    }

我有点困惑

 IQueryable<Category>

以及

IQueryable<Category> query = db.Categories;

我认为它的作用是一个名为GetCategories()的方法只接受Category对象。该方法定义了一个新的实例productcontext,然后运行某种类型的查询并返回它。我可以近距离离开。我只是想确定一下。

3 个答案:

答案 0 :(得分:1)

...名为GetCategories()的方法只有接受类别对象......

IQueryable<Category>类似于intstring,因此该方法不接受任何内容,它会以可查询的方式返回类别(IQueryable)。

答案 1 :(得分:1)

IQueryable返回类型用于表示您希望C#传递您在GetCategories()方法上使用的任何过滤器,以直接传递给数据库。尽管该方法设置为将所有类别都传回,但您可以将它们限制在更高的级别。这样您就不必为每个可以想到的过滤器创建多个方法,这些方法可以追溯到数据库。

这是指向StackOverflow Example about the differences between IEnumerable and IQueryable

的链接

答案 2 :(得分:1)

所以我认为你遇到麻烦的部分是方法签名中的泛型返回类型,如果你之前没有遇到它,它可能是一种奇怪的语法。

您的方法返回一种IQueryable<Category>类型,因此您将返回一个实现接口IQueryable<T>的对象,特别是一个专门用于Category的对象对象。

如果你想创建一个字符串列表,你可以这样做:

MyStrings = new List<string>();

如果你想创建一个返回字符串列表的方法:

public List<string> FetchMyStrings(); // List<string> is your return type.

在您的情况下,您将返回Category个对象的列表:

public List<Category> FetchMyCategories(); // List<Category> is your return type.

对于IQueryable<T>的一些优秀解释,以及为什么你对它感兴趣,我会在这里推荐答案: What is the difference between IQueryable<T> and IEnumerable<T>?

其余代码似乎初始化了一个新的数据库连接,并返回一个可查询对象,允许您获取类别以供代码中的其他地方使用。