Если я правильно понял, у вас есть такой класс:
class XRefResponse
{
public string[] SourceValuesField;
public string[] MappedValuesField;
public bool AllValuesMappedField;
public string[] CommentField;
}
И такая переменная:
XRefResponse mappedValuesResponse
Вы хотите использовать Linq (я не чтобы увидеть все специализированные коды EntityFramework в вашем примере), чтобы получить все значения MappedValuesField, позиции которых соответствуют значениям SourceValuesField, которые находятся в данном массиве.
Исходя из этого, я предполагаю, что SourceValuesField
и MappedValuesField
являются ненулевыми и имеют одинаковую длину.
Тогда возможное решение может быть:
string[] Filter(XRefResponse mappedValuesResponse, string[] sourceDestinationValue)
{
var allPairs = mappedValuesResponse.SourceValuesField.Zip(mappedValuesResponse.MappedValuesField, (source, mapped) => new { Source = source, Mapped = mapped });
var matchedPairs = allPairs.Where(pair => Array.IndexOf(sourceDestinationValue, pair.Source) >= 0);
var result = matchedPairs.Select(pair => pair.Mapped);
return result.ToArray();
}
Этот метод выполняет следующие действия:
- Создает последовательность пар из значений
SourceValueField
и MappedValuesField
(см. Метод Zip ). - Фильтрует все пары, для которых поле
Source
соответствует любому из sourceDestinationValue
values. - Возвращает новую последовательность, которая содержит только значения
Mapped
из предыдущего шага.
Локальные переменные помогают понять код и разделить подоперации, но вы можете удалите их, если хотите.
В случае SourceValueField
и MappedValuesField
всегда обрабатываются парами, лучшей реализацией может быть наличие одного массива, содержащего значения из обоих полей (возможно, с использованием кортежей, например: public Tuple<string,string>[] ValuesField;
), или словарь, в котором ключи соответствуют SourceValueField
и значения соответствуют MappedValuesField
(например: public Dictionary<string,string> ValuesField;
).