我有很多仓库,每个仓库都有一个发货时间,如何比较两个仓库并返回发货时间最短的仓库?
例如,我得到了仓库id1和id2,我需要对它们进行比较。
我试图写一个foreach来匹配这两个id,但是它没有比较,只返回了最后一次id运行的截止日期。
发布于 2018-02-19 03:13:04
我创建了一个简单的控制台应用程序来向您展示我的方法:
实体:
namespace Test
{
class Warehouse
{
public int Id { get; set; }
public int DeliveryTime { get; set; }
public Warehouse(int id, int deliveryTime)
{
Id = id;
DeliveryTime = deliveryTime;
}
}
}服务:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Test
{
class Service
{
public IQueryable<Warehouse> Warehouses { get; set; }
public Service(int quantity)
{
var list = new List<Warehouse>();
var random = new Random();
for (var i = 0; i < quantity; i++)
{
list.Add((new Warehouse(i, random.Next(1, 100))));
}
Warehouses = list.AsQueryable();
}
public Warehouse GetQuickestWarehouse(int a, int b)
{
return Warehouses.Where(w => w.Id == a || w.Id == b).OrderBy(w => w.DeliveryTime).FirstOrDefault();
}
}
}Main:
using System;
using System.Linq;
namespace Test
{
class Program
{
static void Main(string[] args)
{
var service = new Service(100);
var a = service.Warehouses.FirstOrDefault(w => w.Id == 1);
var b = service.Warehouses.FirstOrDefault(w => w.Id == 2);
var min = service.GetQuickestWarehouse(a.Id, b.Id);
Console.WriteLine($"Deliverytime for a: {a.DeliveryTime}");
Console.WriteLine($"Deliverytime for b: {b.DeliveryTime}");
Console.WriteLine($"Quickest Warehouse has Id: {min.Id} with delivery time: {min.DeliveryTime}");
Console.ReadKey();
}
}
}当然,我的实体模型中的构造函数和我的服务仅供控制台应用程序使用,并替换为您自己的数据库上下文和逻辑。希望这能有所帮助。
发布于 2018-02-19 03:30:06
如果您有仓库ids,请将其添加到列表中
var Ids = new List<int>() { 1, 2 };然后使用该列表过滤EF仓库。
或者通过OrderBy获得最低的交货日期
var lowest = db.Warehouse.Where(w=> Ids.Contains(w.Id)).OrderBy(a => a.DeliveryTime).FirstOrDefault();或者,使用最小的日期值
var date = db.Warehouse.Min(a => a.DeliveryTime);
var lowest = db.Warehouse.FirstOrDefault(a => Ids.Contains(a.Id) && DateTime.Equals(a.DeliveryTime,date));https://stackoverflow.com/questions/48854184
复制相似问题