What's the difference(s) between .ToList(), .AsEnumerable(), AsQueryable()?

后端 未结 4 2133
一向
一向 2020-11-22 16:41

I know some differences of LINQ to Entities and LINQ to Objects which the first implements IQueryable and the second implements IEnumerable and my

4条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-22 17:27

    Encountered a bad performance on below code.

    void DoSomething(IEnumerable objects){
        var single = objects.First(); //load everything into memory before .First()
        ...
    }
    

    Fixed with

    void DoSomething(IEnumerable objects){
        T single;
        if (objects is IQueryable)
            single = objects.AsQueryable().First(); // SELECT TOP (1) ... is used
        else
            single = objects.First();
    
    }
    

    For an IQueryable, stay in IQueryable when possible, try not be used like IEnumerable.

    Update. It can be further simplified in one expression, thanks Gert Arnold.

    T single =  objects is IQueryable q? 
                        q.First(): 
                        objects.First();
    

提交回复
热议问题