2016-12-27 3 views
0

linqを作成するのが少し難しいです。私は以下のSQL文を複製する必要があります。2列の範囲のLinq値

SELECT TOP (1000) [Id] 
     ,[Price] 
     ,[ThicknessFrom] 
     ,[ThicknessTo] 
     ,[WeightFrom] 
     ,[WeightTo] 
    FROM [dbo].[MyTable] 
    WHERE (8 between [ThicknessFrom] and [ThicknessTo]) 
    AND (100 between [WeightFrom] and [WeightTo]) 

iを有するデータの例:

id: 1, price: 1, thicknessFrom: 0, thicknessTo: 10, weightFrom: 0, weightTo: 125 
id: 2, price: 2, thicknessFrom: 11, thicknessTo: 20, weightFrom: 126, weightTo: 250 

iが2つの入力、ID = 1を返す重量及び厚さに基づいてデータを返す上記LINQステートメントからクエリを返すようにしたいです。

おかげ

+0

[ThicknessFrom]と[ThicknessTo]との間の8は[ThicknessFrom] = 8で[ThicknessTo] = 8を意味しますか? –

+0

質問にサンプルデータを追加しました。 – nologo

答えて

4
MyTable.Where(entities => entities.ThicknessFrom <= 8) 
     .Where(entities => entities.ThicknessTo >= 8) 
     .Where(entities => entities.WeightFrom <= 100) 
     .Where(entities => entities.WeightTo >= 100) 
     .Take(1000); 

.Take()メソッドが実行されるまで、クエリが実際に実行されません。

+1

ありがとう男。それは1時間私を悩ませている!ポストクリスマスの二日酔いのコーディングは良くない – nologo

+2

SQLの間には** ** **が含まれています。あなたのコードは排他的です。 '<'を '<=' and '>'から '> ='に変更してください。 –

+0

@RichardSchneiderああ、それはむしろ恥ずかしいです:\ –

1

その後、yを与えるであろう、以下のようにLINQを作成することができ、inputThicknesinputWeightは二つの入力とします必要な結果をOU:私たちは、上記のやっていることは/きれいで読みやすいものを維持するために、複数の述語を連鎖さ

var requiredCollection = (from t in db.MyTable where 
           t.ThicknessFrom < inputThicknes && 
           t.ThicknessTo >= inputThicknes && 
           t.WeightFrom < inputWeight && 
           t.WeightTo >= inputWeight 
          select t).Take(1000) 
+1

ねえ、それは動作しません。侵入などのthats: SELECTは* [DBO] [SamplePostPrices] 場合([ThicknessFrom]> 8及び[ThicknessTo] <8) と([WeightFrom]> 100 [WeightTo <100) からではなく。私は 'の間に'を使用している文を得ることができる – nologo

+0

私は答えでいくつかの更新を持って、比較演算子を変更することによって、気にしないでください –