我有一个价格矩阵列表,我存储物品的宽度,长度和价格。我想从输入的宽度和长度找到最大的宽度和高度。例如,让我们说,
Public Class ItemPrice
{
public int id{ get; set; }
public string item{ get; set; }
public int width{ get; set; }
public int height{ get; set; }
public decimal price{ get; set; }
}
List<ItemPrice> itemorder = new List<ItemPrice>();
itemorder.Add(new ItemPrice(1,"A",24,12,$12.24));
itemorder.Add(new ItemPrice(2,"A",24,14,$16.24));
itemorder.Add(new ItemPrice(3,"A",36,12,,$18.24));
itemorder.Add(new ItemPrice(4,"A",36,14,$21.24));
这意味着它看起来像
24 36
--------------------
12 | $12.24 $18.24
14 | $16.24 $21.24
我怎样才能找到ItemPrice id 4作为width = 30和height = 13的结果?如果width = 40和height = 16,我该如何返回null值?
答案 0 :(得分:1)
这应该适合你:
// Change these as needed
int orderWidth = 1;
int orderHeight = 1;
var bestMatch = (from item in itemorder
where item.width >= orderWidth
where item.height >= orderHeight
orderby item.width * item.height
select item).FirstOrDefault();
此LINQ查询过滤掉所有大小小于有序大小的项目。然后它按升序排序剩余的项目。最后,它选择第一个项目(==最小项目),或者为空。
修改强>
以下是基于每个项目边数之和的更新解决方案。
int orderWidth = 4;
int orderHeight = 4;
int orderSum = orderWidth + orderHeight;
var bestMatch = (from item in itemorder
where item.width >= orderWidth
where item.height >= orderHeight
let itemSum = item.width + item.height
let difference = Math.Abs(orderSum - itemSum)
orderby difference
select item).FirstOrDefault();