web-dev-qa-db-ja.com

linq 2エンティティを使用してwhere句をチェックインする2つの条件

こんにちは、列と製品と呼ばれるテーブルがあります

                 product_id
                 prodcut_name
                 prodcut_price( values like 1200,2000,3000,100)
                 prodcut_desc
                 category_id(1,2,3,.....) 

列を持つ別のテーブルカテゴリ

              category_id(1,2,3.......)
              category_name(a,b,c....)

エンティティ名はdbcontextです...

カテゴリ名「a」の商品を入手するにはどうすればよいですか。商品の価格は500以上10000未満です。

エンティティにlinqを使用しています...

どのplsもこれを助けます...

どうもありがとう....

11
rockyashkumar

あなたは論理演算子を探しています、そしてこれらはあなたがc#で使用しようとしているものです:

  • &&論理AND
  • ||論理OR
  • !論理NOT
  • ^論理(ビット単位)XOR
  • COND ? TRUE-STATEMENT : FALSE-STATEMENT三項演算子

したがって、疑似コードの複合条件は次のようになります。

product_price > 500 AND product_price < 10000

DBに外部キーがない場合、コンテキストを作成すると、DBSetのみが含まれ、ナビゲーションプロパティは含まれなくなります。したがって、唯一の選択肢は、Cubicle.Jockeyの回答を使用することです。

DBに外部キーがある場合、エンティティオブジェクトにナビゲーションプロパティがあり、次のことが可能になります。

var query = from p in dbcontext.products
where p.category.name == 'a' 
   && p.product_price > 500 
   && p.product_price < 10000
select p;

または、LINQ拡張メソッドを直接使用することもできます。

  var query = dbcontext.Products.Where(p => p.category.name == 'a' 
                                         && p.product_price > 500 
                                         && p.product_price < 10000);

リストまたは配列が必要で、dbcontextを閉じたい場合は、ToListToArrayまたはqueryを呼び出します。

var products = query.ToList();

Entity Framework(EF)-ビルドイン EntitySQL クエリ言語でそれを行う別の方法があります。次のような表現になります。

var query = ProductsQuery.Where("it.Category.Name == 'a' AND it.Product_Price BETWEEN 500 AND 10000");

ここで、ProductsQueryObjectQuery<Product>

29
vittore
from p in dbcontext.products
join c in dbcontext.category on p.category_id equals c.category_id
where p.product_price > 500 && p.product_price < 10000 && c.Name == "a"
select p

これにより、フィルタリングされた結果を含むIQueryableが返されます。

以下のVittoreの回答に基づいて、外部キー制約がある場合、これがより適切なバージョンになります。

from p in dbcontext.products
where p.category.name =='a' && p.product_price > 500 && p.product_price < 10000
select p;
5
Cubicle.Jockey

category_idの製品とカテゴリのテーブルを結合し、whereを使用してproduct_priceを除外します。

1
MAK