Как использовать массивы для сравнения с использованием лямбда-выражений в C # - PullRequest
2 голосов
/ 02 мая 2011

Я хотел бы знать, есть ли способ сократить сравнение в лямбда-выражениях, используя массивы, содержащие элементы сравнения, вместо записи элементов по одному.

На практике у меня есть переменная Dictionary<K,V> с именем litemList , уже заполненная данными. Я хотел бы иметь еще одну переменную Dictionary<K,V> только с некоторыми из ключей из litemList .

lfilteredItemlist = litemList.Where(m => m.Key == "Name", m.Key == "Surname")
                             .ToDictionary(m => m.Key, m => m.Value);

Этот код работает отлично, но когда у меня есть 10 или более ключей для фильтрации, и они могут изменяться со временем (или даже выбираться пользователями), это решение неосуществимо. Я ищу какое-то решение, где, предполагая, что есть массив со всеми ключами для фильтрации, я могу использовать что-то вроде этого:

filterArray = {"Name", "Surname"};

lfilteredItemlist = litemList.Where(m => m.Key == filterArray)
                             .ToDictionary(m => m.Key, m => m.Value);

Я совершенно уверен, что есть метод, потому что однажды я увидел его, когда искал материал о Dynamic LINQ . К сожалению, я не могу найти статью снова, и Скотт Гатри не упоминает ее в своем блоге.

Спасибо

Francesco

1 Ответ

5 голосов
/ 02 мая 2011

Как насчет изменения кода на это:

lfilteredItemlist = litemList.Where(m => filterArray.Contains(m.Key))
                         .ToDictionary(m => m.Key, m => m.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...