проверка двух условий в предложении where с использованием linq 2 entites - PullRequest
10 голосов
/ 03 сентября 2011

привет, у меня есть таблица продуктов с колонками

                 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 ...

Как я могу получить продукты с названием категории "а" и ценой продукта> 500 и <10000 </p>

я использую linq для объединения ...

Поможет ли любая просьба об этом ... один ....

Большое спасибо ....

Ответы [ 3 ]

27 голосов
/ 03 сентября 2011

Вы ищете логические операторы, и именно эти вы собираетесь использовать в c #:

  • && логический AND
  • || логический OR
  • ! логический NOT
  • ^ логический (побитовый) XOR
  • COND ? TRUE-STATEMENT : FALSE-STATEMENT троичный оператор

Итак, ваше составное условие в псевдокоде будет выглядеть так:

product_price > 500 AND product_price < 10000

Теперь, если у вас нет внешнего ключа в БД, когда вы создали свой контекст, он будет иметь только DBSets, а у них не будет свойств навигации. Поэтому ваш единственный вариант - использовать ответ Cubicle.Jockey.

Если у вас есть внешние ключи в БД, у вас будут свойства навигации для объектов сущности, и вы сможете делать следующее:

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();

Существует альтернативный способ сделать это с помощью Entity Framework (EF) - встроенный EntitySQL язык запросов. Вы будете иметь подобное выражение с ним:

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

, где ProductsQuery - ObjectQuery<Product>.

5 голосов
/ 03 сентября 2011
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 с отфильтрованными результатами.

На основании приведенного ниже ответа Витторе, если есть ограничения внешнего ключа, это будет более подходящая версия:

from p in dbcontext.products
where p.category.name =='a' && p.product_price > 500 && p.product_price < 10000
select p;
1 голос
/ 03 сентября 2011

присоединитесь к таблицам продуктов и категорий на category_id, а затем используйте where для фильтрации product_price.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...