Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linq version of SQL "IN" statement

I have the following 3 tables as part of a simple "item tagging" schema:

==Items==

  • ItemId int
  • Brand varchar
  • Name varchar
  • Price money
  • Condition varchar
  • Description varchar
  • Active bit

==Tags==

  • TagId int
  • Name varchar
  • Active bit

==TagMap==

  • TagMapId int
  • TagId int (fk)
  • ItemId int (fk)
  • Active bit

I want to write a LINQ query to bring back Items that match a list of tags (e.g. TagId = 2,3,4,7). In my application context, examples of items would be "Computer Monitor", "Dress Shirt", "Guitar", etc. and examples of tags would be "electronics", "clothing", etc. I would normally accomplish this with a SQL IN Statement.

like image 606
Brian David Berman Avatar asked Sep 05 '25 03:09

Brian David Berman


2 Answers

Something like

var TagIds = new int[] {12, 32, 42};

var q = from map in Context.TagMaps 
        where TagIds.Contains(map.TagId)
        select map.Items;

should do what you need. This will generate an In ( 12, 32, 42 ) clause (or more specifically a parameterized IN clause if I'm not mistaken).

like image 111
Denis Troller Avatar answered Sep 08 '25 00:09

Denis Troller


given array of items:

var list = new int[] {2,3,4}

use:

where list.Contains(tm.TagId)
like image 22
Luke Schafer Avatar answered Sep 08 '25 00:09

Luke Schafer