Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is LINQ equivalent of SQL’s "IN" keyword

How can I write below sql query in linq

select * from Product where ProductTypePartyID IN
(
    select Id from ProductTypeParty where PartyId = 34
)
like image 660
pramodtech Avatar asked Nov 24 '11 10:11

pramodtech


2 Answers

There is no direct equivalent in LINQ. Instead you can use contains () or any other trick to implement them. Here's an example that uses 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;

check this link for details: in clause Linq

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


var myProducts = from p in db.Products
                 where productList.Contains(p.ProductID)
                select p;
like image 76
Niranjan Singh Avatar answered Sep 19 '22 05:09

Niranjan Singh


Syntactic variations aside, you can write it in practically the same way.

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

I prefer using the existential quantifier, though:

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

I expect that this form will resolve to an EXISTS (SELECT * ...) in the generated SQL.

You'll want to profile both, in case there's a big difference in performance.

like image 22
Marcelo Cantos Avatar answered Sep 19 '22 05:09

Marcelo Cantos