0

製品テーブルで選択を行う必要があります。製品には ZipCode という列があり、特定の郵便番号からすべての製品を取得する必要があり、選択した郵便番号より 5 つ上の郵便番号と低い郵便番号を取得する必要があります

郵便番号が51235の場合、5つの高い郵便番号と低い郵便番号の製品が必要ですが、これはlinqで可能ですか?

誰かが助けてくれることを願っています

4

3 に答える 3

1

たぶん次のようなもの:

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;

アップデート:

すべてを 1 つのステートメントで実行したい場合は、次のように実行できます。

        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)
                );

ただし、読みやすくするために、複数のステートメントに分割する方が簡単な場合があります。

于 2012-05-04T10:28:04.273 に答える
0

あなたが使用することができます、

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 );
于 2012-05-04T10:35:39.820 に答える
0

zipcode-5 と zipcode+5 の間の商品を取得するには

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

製品を取得するには、zipcode +/- 5 および現在の zipcode と正確に等しい郵便番号を持っています。

container.Products.Where(w => (w.ZipCode == zipCode - 5) || (w.ZipCode == zipCode + 5) || (w.ZipCode == zipCode + 5));
于 2012-05-04T10:27:28.330 に答える