如何使用LINQ?</price>从List <price>中获取最接近的数字

时间:2014-01-20 07:30:42

标签: c# linq list numbers

我有一个价格矩阵列表,我存储物品的宽度,长度和价格。我想从输入的宽度和长度找到最大的宽度和高度。例如,让我们说,

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值?

1 个答案:

答案 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();