Что является LINQ эквивалентом ключевого слова SQL IN? - PullRequest
6 голосов
/ 24 ноября 2011

Как мне написать ниже sql запрос в linq

select * from Product where ProductTypePartyID IN
(
    select Id from ProductTypeParty where PartyId = 34
)

Ответы [ 4 ]

6 голосов
/ 24 ноября 2011

Прямого эквивалента в LINQ нет.Вместо этого вы можете использовать contains () или любой другой трюк для их реализации.Вот пример, который использует Contains:

String [] s = new String [5];
s [0] = "34";
s [1] = "12";
s [2] = "55";
s [3] = "4";
s [4] = "61";

var  result = from d in  context.TableName
              where s.Contains (d.fieldname)
              select d;

, проверьте эту ссылку для деталей: в предложении Linq

int[] productList = new int[] { 1, 2, 3, 4 };


var myProducts = from p in db.Products
                 where productList.Contains(p.ProductID)
                select p;
3 голосов
/ 24 ноября 2011

Помимо синтаксических вариаций, вы можете написать это практически таким же образом.

from p in ctx.Product
where (from ptp in ctx.ProductTypeParty
       where ptp.PartyId == 34
       select ptp.Id).Contains(p.ProductTypePartyID)
select p

Я предпочитаю использовать экзистенциальный квантор, хотя:

from p in ctx.Product
where (from ptp in ctx.ProductTypeParty
       where ptp.PartyId == 34
       && ptp.Id == p.ProductTypePartyID).Any()
select p

Я ожидаю, что эта форма будетразрешить EXISTS (SELECT * ...) в сгенерированном SQL.

Вы захотите профилировать оба варианта в случае большой разницы в производительности.

1 голос
/ 24 ноября 2011

Вы используете предложение "Содержит в" Где.

1 голос
/ 24 ноября 2011

Что-то похожее на это

var partyProducts = from p in dbo.Product 
                    join pt in dbo.ProductTypeParty on p.ProductTypePartyID equal pt.PartyId 
                    where pt.PartyId = 34 
                    select p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...