两个条件检查where子句使用linq 2 entites

roc*_*mar 10 .net c# linq linq-to-entities entity-framework

嗨,我有一个名为带列的产品的表

                 product_id
                 prodcut_name
                 prodcut_price( values like 1200,2000,3000,100)
                 prodcut_desc
                 category_id(1,2,3,.....) 
Run Code Online (Sandbox Code Playgroud)

带列的anorther表类别

              category_id(1,2,3.......)
              category_name(a,b,c....)
Run Code Online (Sandbox Code Playgroud)

和实体名称是dbcontext ...

如何获得类别名称为"a"且产品价格> 500且<10000的产品

我正在使用linq来实现...

会不会对此有所帮助......一个......

非常感谢....

vit*_*ore 28

您正在寻找逻辑运算符,这些是您将在c#中使用的运算符:

  • && 合乎逻辑 AND
  • || 合乎逻辑 OR
  • ! 合乎逻辑 NOT
  • ^ 逻辑(按位) XOR
  • COND ? TRUE-STATEMENT : FALSE-STATEMENT 三元运算符

所以伪代码中的复合条件看起来像:

product_price > 500 AND product_price < 10000
Run Code Online (Sandbox Code Playgroud)

现在,如果您在DB中没有外键,那么当您创建上下文时,它只会有DBSets,并且它们不具有导航属性.因此,您唯一的选择是使用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;
Run Code Online (Sandbox Code Playgroud)

或者,您可以直接使用LINQ扩展方法:

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

如果你需要一个列表或数组,并希望您致电或者接近的DbContext ToListToArrayquery:

var products = query.ToList();
Run Code Online (Sandbox Code Playgroud)

使用Entity Framework(EF)可以使用其他方法 - 内置EntitySQL查询语言.你将会有类似的表达方式:

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

哪里ProductsQueryObjectQuery<Product>.


Cub*_*key 5

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
Run Code Online (Sandbox Code Playgroud)

这将返回带有过滤结果的IQueryable.

根据Vittore在下面的回答,如果存在外键约束,这将是更合适的版本:

from p in dbcontext.products
where p.category.name =='a' && p.product_price > 500 && p.product_price < 10000
select p;
Run Code Online (Sandbox Code Playgroud)