Linq,选择值 + - 一个值

本文关键字:一个 选择 Linq | 更新日期: 2023-09-27 18:33:15

>我需要在产品表上进行选择。该产品有一个名为"邮政编码"的列我需要从特定邮政编码获取所有产品,并且 5 个邮政编码高于和低于所选邮政编码

所以如果我有邮政编码 51235我需要来自 5 个较高邮政编码和较低邮政编码的产品,LINQ 可以这样做吗?

希望有人能帮忙

Linq,选择值 + - 一个值

也许是这样的:

var zip = 51235;
context.Products.Where(p => p.ZipCode >= zip - 5 && p.ZipCode <= zip +5); 

或者像这样:

var zip = 51235;
var products = from p in context.Products
where p.ZipCode >= zip -5 && p.ZipCode <= zip + 5
select p;

更新:

如果你想在一个语句中完成所有操作,你可以这样做:

        var products = Products.Where(p1 => 
                Products.Select(p2 => p2.ZipCode)
                        .Distinct()
                        .Where(p3 => p3 >= zipCode)
                        .Take(4)
                        .Union(
                            Products.Select(p4 => p4.ZipCode)
                            .Distinct()
                            .Where(p5 => p5 < zipCode)
                            .Take(3)
                        ).Contains(p1.ZipCode)
                );

但是,将其拆分为不同的语句以使其更具可读性可能更容易。

获取邮政编码 5 和邮政编码 + 5 之间的产品

container.Products.Where(w => (w.ZipCode > zipCode - 5) && (w.ZipCode < zipCode + 5));

要获得产品的邮政编码,其邮政编码正好等于邮政编码 +/- 5 和当前邮政编码。

container.Products.Where(w => (w.ZipCode == zipCode - 5) || (w.ZipCode == zipCode + 5) || (w.ZipCode == zipCode + 5));

您可以使用,

var collectionEqualToZipCode = SourceCollection.Where(source=> source.Zip == SelectedZip);
int lessZipCodesTaken = 0;
int greaterZipCodesCountTaken = 0;
var collectionlessthanOrGreaterthanZipCode = SourceCollection.TakeWhile(source => 
(source.Zip < SelectedZip && lessZipCodesTaken++ < 5) ||
(source.Zip > SelectedZip && greaterZipCodesCountTaken ++ < 5));
FinalCOllection.AddRange(collectionEqualToZipCode);
FinalCOllection.AddRange(collectionlessthanOrGreaterthanZipCode );