我的服务应该返回什么界面?IQueryable,IList,IEnumerable?

Bor*_*ens 9 .net c#

想象一下,我有一个SearchService层,它有一个方法来搜索以某个字符串开头的所有汽车;

public static class Searcher{
    public IAnInterface<Car> CarsStartingWith(string startWith){
        //magic
    }
}
Run Code Online (Sandbox Code Playgroud)

我的服务应该使用什么界面?
IQueryable可以在我的应用程序的其余部分呈现一个漂亮的流畅界面.
IEnumerable有一个懒惰的方面.
IList是最实用的.

我想让我的所有服务返回相同的界面以保持一致性,使整个事情变得更加容易.
ICollection可能也是一个选项,但它只提供这么少......

Luk*_*keH 2

如果您希望所有服务返回相同的接口,那么我可能会选择IEnumerable<>.

如有必要,您的调用者可以很容易地转换为IQueryable或创建一个List

IEnumerable<Car> cars = Searcher.CarsStartingWith("L");
var carsList = cars.ToList();
var queryableCars = cars.AsQueryable();
Run Code Online (Sandbox Code Playgroud)

  • 返回 IEnumerable&lt;T&gt; 的问题是,如果您决定将其转换为 IQuerable&lt;T&gt; ,您将不再查询数据库,而是查询内存中的对象。正如 James Curran 指出的那样,“IQueryable”有点沉重,但在我的大多数情况下,我发现提供可查询的设置会更好,让消费者决定是否要将其向下转换为 IEnumerable。 (5认同)