使用linq2实体检查where子句的两个条件

本文关键字:两个 条件 实体 linq2 检查 where 子句 使用 | 更新日期: 2023-09-27 18:07:40

hi我有一个名为产品的表,它有列

                 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来表示。。。

有人能帮忙吗。。一

非常感谢。。。。

使用linq2实体检查where子句的两个条件

您正在寻找逻辑运算符,这些是您将在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,则在query:上调用ToListToArray

var products = query.ToList();

使用实体框架(EF(还有另一种方法——在EntitySQL查询语言中构建。你会有类似的表达:

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

其中CCD_ 13是CCD_。

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;

加入category_id上的产品和类别表,然后使用where筛选出product_price