0

我正在阅读 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 对象。该方法定义了一个新的实例产品上下文,然后它运行某种类型的查询并返回它。我可能很近,也可能很远。我只是想确定一下。

4

3 回答 3

1

... 名为 GetCategories() 的方法,仅接受Category 对象 ...

IQueryable<Category>int是一个类型,就像string该方法不接受任何内容一样,它以可查询的方式返回类别(IQueryable)。

于 2013-11-10T00:49:18.267 回答
1

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

这是有关 IEnumerable 和 IQueryable 之间差异的 StackOverflow 示例的链接

于 2013-11-10T01:05:47.877 回答
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>,以及为什么你会对它感兴趣,我会推荐这里的答案: IQueryable<T> 和 IEnumerable<T> 之间有什么区别?

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

于 2013-11-10T01:10:24.130 回答