public static string[] GetPath <TSource, TResult>(Expression <Func <TSource, TResult> > expression)
    {
        var visitor = new PathExpressionVisitor();

        visitor.Visit(expression.Body);
        return(Enumerable.Reverse(visitor._path).ToArray());
    }
        private void OkButton_OnClick(object sender, RoutedEventArgs e)
        {
            SmartPlaylist.Name = SmartPlaylistName.Text;
            SmartPlaylist.Conditions.Clear();

            foreach (QueryConditionEditor conditionEditor in ConditionEditors)
            {
                SmartPlaylist.Conditions.Add(new QueryCondition
                {
                    Field    = PathExpressionVisitor.GetPath(conditionEditor.Model.Field.Value).First(),
                    Operator = conditionEditor.Model.Operator.Value,
                    Value    = conditionEditor.Model.Value
                });
            }

            DialogResult = true;

            Close();
        }