使用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来表示。。。
有人能帮忙吗。。一
非常感谢。。。。
您正在寻找逻辑运算符,这些是您将在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
:上调用ToList
或ToArray
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
。