2016-11-15 3 views
1

У меня есть 2 стола, категории и продукта.Использование «IN» с каркасом лица

Категория имеет название всех категорий, а ProductToCategory - список всех категорий, присвоенных продукту. Он отделен, потому что один продукт может иметь несколько категорий.

Я новичок в структуре сущностей и пытаюсь получить список категорий, присвоенных определенному продукту. Мне нужно вернуть информацию из таблицы Category, но ProductToCategory - это то, где я ищу, чтобы получить то, что назначено.

Я пытаюсь получить все категории, в которых идентификатор категории присваивается определенному идентификатору продукта в таблице ProductTOCategory.

В SQL я введите:

SELECT (Category Fields) FROM Category WHERE Category.Id 
IN (SELECT ProductToCategory.CategoryId FROM ProductToCategory 
WHERE ProductId = (THE PRODUCT ID)) 

Или что-то подобное

+1

Все зависит от того, как определена ваша модель. При правильно определенных навигационных свойствах это должно быть так же просто, как 'Products.Find (10) .Categories'. Это может привести к двум вызовам в базе данных, поэтому, возможно, вы захотите сделать что-то вроде: «Категории. Где (c => c.Products.Select (p => p.ProductId) .Contains (10))' – MarcinJuraszek

+0

Сначала вам понадобится набор постоянных значений, затем используйте 'Where (x => list.Contains (x))' для генерации предложения 'IN'. –

+1

Зная, что SQL 'x in (...)' переводит в LINQ '(...). Содержит (x)', вы можете попробовать ввести SQL-запрос в LINQ. –

ответ

1

Вы можете использовать join вместо IN здесь.

Надежда у вас есть свойство навигации между ними Category и ProductToCategory .Затем вы можете сделать это, как показано ниже.

var query = 
    from t1 in context.Category 
    where t1.ProductToCategory.ProductId == "THE-PRODUCT-ID" 
    select new { t1.Col1, t1.Col2, ... }; 

Если у вас нет, то используйте join, как показано ниже.

var query = 
    from t1 in context.Category 
    join t2 in context.ProductToCategory 
     on t1.Id equals t2.CategoryId 
    where t2.ProductId == "THE-PRODUCT-ID" 
    select new { t1.Col1, t1.Col2, ... }; 
Смежные вопросы