C# 如何重新排序此Linq场景的评估

C# 如何重新排序此Linq场景的评估,c#,linq,C#,Linq,下面是一段代码片段 IEnumerable<Car> GetCars() { foreach(var request in RequestQueue()) { RemoveFromQueue(request); yield return MakeCar(request);//Expensive } } //使用场景2:问题,我已经制造了所有汽车,但只想要一辆。 foreach(Car c in GetCars().Where(p=>

下面是一段代码片段

IEnumerable<Car> GetCars()
{
   foreach(var request in RequestQueue())
   {
       RemoveFromQueue(request);
       yield return MakeCar(request);//Expensive
   }
}
//使用场景2:问题,我已经制造了所有汽车,但只想要一辆。

foreach(Car c in GetCars().Where(p=>p.Request.Id==10000))
{
 //Do stuff
}
在我开始做一辆车之前,有可能实施Where条款吗?怎么做

显然,where子句可以根据客户机的使用情况而变化


动机:执行Linq to SQL时,.Take(10)将转换为Top(10),并在服务器上执行查询。我想实现这样的目标。

在没有看到其余代码的情况下不确定,但是什么阻止了您这样做

Car GetCar(id)
{
    Car result = default(Car);

    // I am assuming that RequestQueue() is Enumerable?
    Request request = RequestQueue().SingleOrDefault(p => p.Request.Id == id);

    if(result != null)
    {
        RemoveFromQueue(request);

        result = MakeCare(request);
    }

    return result;
}
然后使用这个方法,而不是GetCar()和//做一些事情,但是如果没有看到更多的代码,就很难知道这个方法是否有效。希望这能有所帮助。

的建议可能是最实用的建议:公开一个可以获得一辆车的API

也就是说,关于how.Take(10)如何进入SQL server的前10名的最后一个问题的答案是,您必须实现IQueryable提供程序并解析表达式树。这不是一件小事,但如果您有兴趣了解如何做,这里有一系列关于如何做的文章:


为查询添加了动机,看看这是否有帮助
Car GetCar(id)
{
    Car result = default(Car);

    // I am assuming that RequestQueue() is Enumerable?
    Request request = RequestQueue().SingleOrDefault(p => p.Request.Id == id);

    if(result != null)
    {
        RemoveFromQueue(request);

        result = MakeCare(request);
    }

    return result;
}