数组中周围数字的Linq表达式

数组中周围数字的Linq表达式,linq,linq-to-sql,Linq,Linq To Sql,我需要一个linq表达式,该表达式将在给定数字的数组中查找最近的数字(“大于或等于”和“小于或等于”) 例如。 阵列-1、33、66、100 如果我有数字10,我想返回1和33。如果我有号码70,我想返回66和100。如果我有号码33,我想返回33和66 我可以用一些基本的for循环来实现这一点,但这是对数据库中的数字的操作,所以我更喜欢linq而不是sql表达式 编辑:我实际上是在寻找一个linq表达式来实现这一点,但也许我有点希望:)var list=new[]{1,33,66,100};

我需要一个linq表达式,该表达式将在给定数字的数组中查找最近的数字(“大于或等于”和“小于或等于”)

例如。 阵列-1、33、66、100

如果我有数字10,我想返回1和33。如果我有号码70,我想返回66和100。如果我有号码33,我想返回33和66

我可以用一些基本的for循环来实现这一点,但这是对数据库中的数字的操作,所以我更喜欢linq而不是sql表达式

编辑:我实际上是在寻找一个linq表达式来实现这一点,但也许我有点希望:)

var list=new[]{1,33,66,100};
var n=33;
var高=列表
.OrderBy(i=>i)
.FirstOrDefault(i=>i>=n);
变量低=列表
.OrderByDescending(i=>i)
.FirstOrDefault(i=>i
ArrayList arrList=new ArrayList();
整数=10;
增加(1);
增加(10);
增加(20);
增加(-12);
int numberBelow=(从列表中的int i开始)
其中i=数字
选择i.Min();

下面的数字是比搜索值小的最大值,同样,上面的数字是比搜索值大的最小值。唯一的问题是您希望大于或等于还是刚好大于。

与Andrews answer类似,但我更喜欢在OrderBy之前进行筛选,这样可以减少数据量查询必须运行。OrderBy.First与Min相同,OrderByDescending.First与Max相同

var high = list
    .Where(i => i > n)
    .DefaultIfEmpty()
    .Min();

var low = list
    .Where(i => i <= n)
    .DefaultIfEmpty()
    .Max();
var高=列表
.其中(i=>i>n)
.DefaultIfEmpty()
.Min();
变量低=列表

.Where(i=>i最终,它在SQL上运行。这对操作的顺序和顺序有何影响?这将是一个很好的测试,但最终猜测,它们将是相同的?
        ArrayList arrList = new ArrayList();
        int number = 10;

        arrList.Add(1);
        arrList.Add(10);
        arrList.Add(20);
        arrList.Add(-12);

        int numberBelow = (from int i in arrList
                           where i <= number
                           select i).Max();

        int numberAbove = (from int i in arrList
                           where i >= number
                           select i).Min();
var high = list
    .Where(i => i > n)
    .DefaultIfEmpty()
    .Min();

var low = list
    .Where(i => i <= n)
    .DefaultIfEmpty()
    .Max();