Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongodb, linq driver. How to construct Contains with variable or statements

I'm using the Mongo LINQ Driver for C#, works great.

Sorting a lot of properties but heres a problem I can't solve, its probably simple.

var identifierList = new []{"10", "20", "30"};
var newList = list.Where(x => identifierList.Contains(x.Identifier));

This is NOT supported ... 

So I could do something like:

 var newList = list.Where(x => x.Identifier == "10" || x.Identifier == "20" || x.Identifier == "30");

But since the list is variable ... how do I construct the above? Or are there even better alternatives?

The list is of type IQueryable<MyCustomClass>

For information ... this is used as a filter of alot of properties. In SQL I could have a parent -> child relationship. But as I can't as the parent for the main ID I need to take all the ID's out and then construct it like this.

Hopes this makes sense. If needed I will explain more.

like image 337
Syska Avatar asked Jun 06 '12 22:06

Syska


1 Answers

To answer my own question ... The Mongo Sharp LINQ driver has an extension method called "In" which does exactly what I need.

They have however implemented it in 1.5 so we can use the old way like: https://jira.mongodb.org/browse/CSHARP-462

 var list = new []{"10", "10"};

 search.Where(x => list.Contains(x.Id));

But the version 1.5 package is not on nuget yet.

However, this should work with the "In" extension that comes as a special surprise with the mongo-csharp-driver.

 search.Where(x => x.In(list));
like image 116
Syska Avatar answered Oct 22 '22 17:10

Syska