嗨我有一个名为带列
的产品的表 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来实现...
任何人都会对此有所帮助......一个......
非常感谢....
答案 0 :(得分:27)
您正在寻找逻辑运算符,这些是您将在c#中使用的运算符:
&&
逻辑AND
||
逻辑OR
!
逻辑NOT
^
逻辑(按位)XOR
COND ? TRUE-STATEMENT : FALSE-STATEMENT
三元运营商因此伪代码中的复合条件看起来像:
product_price > 500 AND product_price < 10000
现在,如果您在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;
或者,您可以直接使用LINQ扩展方法:
var query = dbcontext.Products.Where(p => p.category.name == 'a'
&& p.product_price > 500
&& p.product_price < 10000);
如果您需要列表或数组并想要关闭dbcontext,则在ToList
上调用ToArray
或query
:
var products = query.ToList();
使用实体框架(EF)进行替代方法 - 内置EntitySQL查询语言。你将会有类似的表达方式:
var query = ProductsQuery.Where("it.Category.Name == 'a' AND it.Product_Price BETWEEN 500 AND 10000");
其中ProductsQuery
为ObjectQuery<Product>
。
答案 1 :(得分: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
这将返回带有过滤结果的IQueryable。
根据Vittore的回答,如果存在外键限制,这将是更合适的版本:
from p in dbcontext.products
where p.category.name =='a' && p.product_price > 500 && p.product_price < 10000
select p;
答案 2 :(得分:1)
加入category_id
上的产品和类别表格,然后使用where
过滤掉product_price
。