web-dev-qa-db-fra.com

deux conditions vérifiant où clause utilisant des entités linq 2

salut j'ai table appelé produits avec des colonnes

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

autres catégories de table avec colonnes

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

et nom d'entité est dbcontext ...

Comment puis-je obtenir les produits avec le nom de catégorie "a" et le prix du produit est> 500 et <10000

j'utilise linq à des entités ...

est-ce que des pls aideraient sur ceci..un ....

Merci beaucoup....

9
rockyashkumar

Vous recherchez des opérateurs logiques, et ceux-ci sont ceux que vous allez utiliser en c #:

  • && logique AND
  • || logique OR
  • ! logique NOT
  • ^ logique (au niveau du bit) XOR
  • COND ? TRUE-STATEMENT : FALSE-STATEMENT opérateur ternaire 

Donc, votre condition composite en pseudo-code va ressembler à:

product_price > 500 AND product_price < 10000

Maintenant, si vous n'avez pas de clé étrangère dans la base de données, lorsque vous avez créé votre contexte, il ne contiendra que des DBSets, et ils n'auront pas de propriétés de navigation. Donc, votre seule option est d'utiliser la réponse de Cubicle.Jockey.

Si vous avez des clés étrangères dans la base de données, vous aurez des propriétés de navigation sur vos objets d'entité et vous pourrez effectuer les opérations suivantes:

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

Sinon, vous pouvez utiliser directement les méthodes d'extension LINQ:

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

Si vous avez besoin d'une liste ou d'un tableau et que vous voulez fermer dbcontext, vous appelez soit ToList, soit ToArray sur query:

var products = query.ToList();

Il existe un autre moyen de le faire avec Entity Framework (EF) - build-in EntitySQL query language. Vous allez avoir une expression similaire avec:

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

ProductsQuery est ObjectQuery<Product>.

26
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

Cela vous retournera un IQueryable avec les résultats filtrés.

D'après la réponse de Vittore ci-dessous, s'il existe une contrainte de clé étrangère, il s'agit de la version la plus appropriée:

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

joignez les tables de produits et de catégories sur category_id puis utilisez une where pour filtrer product_price.

1
MAK