我正在浏览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,然后运行某种类型的查询并返回它。我可以近距离离开。我只是想确定一下。
答案 0 :(得分:1)
...名为GetCategories()的方法只有接受类别对象......
IQueryable<Category>
类似于int
或string
,因此该方法不接受任何内容,它会以可查询的方式返回类别(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>?
其余代码似乎初始化了一个新的数据库连接,并返回一个可查询对象,允许您获取类别以供代码中的其他地方使用。