【发布时间】:2015-08-08 12:40:50
【问题描述】:
我想将 GetCurrentAuction 重写为单个 LINQ 请求:
private AuctionInfo GetCurrentAuction()
{
var auctions = Auctions.List().ToList();
var liveAuction = auctions
.Where(AuctionIsLive)
.OrderBy(a => a.StartDate)
.FirstOrDefault();
if (liveAuction != null)
{
return liveAuction;
}
var openAuction = auctions
.Where(AuctionIsOpen)
.OrderBy(a => a.StartDate)
.FirstOrDefault();
if (openAuction != null)
{
return openAuction;
}
// next upcoming auction
return auctions
.Where(a => a.StartDate >= DateTime.UtcNow)
.OrderBy(a => a.StartDate)
.FirstOrDefault();
}
private bool AuctionIsLive(AuctionInfo auction)
{
// WorkflowStage is int
return auction.WorkflowStage == LIVE_WORKFLOW_STAGE;
}
private bool AuctionIsOpen(AuctionInfo auction)
{
return auction.WorkflowStage == OPEN_WORKFLOW_STAGE;
}
有人可以建议如何实现这一目标吗?看起来使用 auctions.GroupBy(a => a.WorkflowStage) 并没有让我更接近解决方案。
【问题讨论】:
-
我不确定您现有的代码是否一定正确。您会搜索最早的(所有历史上的)“实时”拍卖和最早的“公开”拍卖,如果两者都没有找到,则中止。然后,您对最早的 upcoming/future 拍卖进行第三次搜索,无论它是“Live”还是“Open”(基本上忽略了您之前对“Live”和“Open”的搜索)并返回它.这是正确的吗?
-
@ChrisSinclair 如果没有任何现场或公开拍卖,我将执行“即将举行的拍卖”查询的唯一方法
-
在最好的情况下,我只执行单个查询(找到实时拍卖并返回它),在最坏的情况下 3
-
-1 你需要告诉 use 你使用的是什么类型的 Linq? Linq 到 SQL、到 EF、到对象等?请标记您使用的类型。
-
Auctions.List()返回什么?我认为您的主要问题是您将所有拍卖都拖入内存。这应该首先处理。
标签: c# linq linq-to-objects