2012-06-06 3 views
4

Я использую Mongo LINQ Driver для C#, отлично работает.Mongodb, linq driver. Как построить Contains с переменной или операциями

Сортировка множества объектов недвижимости, но проблема, которую я не могу решить, ее, вероятно, просто.

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

This is NOT supported ... 

Так что я мог бы сделать что-то вроде:

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

Но так как список переменной ... как я строить выше? Или есть еще лучшие альтернативы?

list имеет тип IQueryable<MyCustomClass>

Для получения дополнительной информации ... это используется в качестве фильтра много свойств. В SQL я мог бы иметь родительские -> дочерние отношения. Но поскольку я не могу как родитель для основного идентификатора, мне нужно взять все идентификаторы, а затем построить его так.

Надеется, что это имеет смысл. При необходимости я объясню больше.

+0

Что вы пытаетесь сделать? найти, содержит ли список все элементы в другом списке? ваш код выше (после исправления) сделает, что элементы в newList будут теми же элементами в списке – eyossi

+0

Ups, ошибка в примере, просто исправит это :-) – Syska

+0

По-прежнему ... непонятно. попробуйте объяснить простыми словами то, что вы пытаетесь достичь с помощью операции с двумя списками. например: я хочу скопировать идентификаторList в newList (что я могу предположить из приведенного выше кода) – eyossi

ответ

5

Чтобы ответить на мой собственный вопрос ... Драйвер Mongo Sharp LINQ имеет метод расширения, называемый «In», который делает именно то, что мне нужно.

Они, однако реализовать его в 1,5 раза, поэтому мы можем использовать старый способ, как: https://jira.mongodb.org/browse/CSHARP-462

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

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

Но пакет версии 1.5 не на NuGet еще.

Однако это должно работать с расширением «In», которое является особым сюрпризом с помощью монго-csharp-драйвера.

search.Where(x => x.In(list)); 
+1

Ваша начальная инструкция должна сработать. Он просто не был реализован в 1.4.2. 1.5 будет содержать эту функцию. https://jira.mongodb.org/browse/CSHARP-462 –

+0

Да, это должно сработать, но поскольку я использую версию 1.4.2, а не 1.5, мне придется использовать последнюю. Большинство проблем, которые я обнаружил у поставщика LINQ, уже исправлены :-). Надеюсь, они начнут делать предварительный выпуск :-). – Syska

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

Вы просто должны использовать список вместо IEnumerable (сделать это, используя .ToList())

Если он не работает, пожалуйста, добавьте список вашего типа

+0

Я пытаюсь отфильтровать список. Как избавиться от всех MyCustomClass в IQueryable , у которых нет свойства Identifier, равного либо «10», «20», либо «30». – Syska

+0

Unsupported where where: Enumerable.Contains (String []: {"10", "20", "30"}, x.Identifier). – Syska

+0

Можете ли вы добавить и инициализацию списка и объявление? – eyossi

Смежные вопросы