Замените цикл для переключения запросом Linq

У меня есть объект Message, который переносит формат сообщения, которым я не управляю. Формат представляет собой простой список пар Ключ/Значение. Я хочу извлечь список пользователей из данного сообщения. Например, учитывая следующее сообщение...

1. 200->....
2. 300->....
3. ....
4. 405->.... 
5. 001->first_user_name
6. 002->first_user_phone
7. 003->first_user_fax
8. 001->second_user_name
9. 001->third_user_name
10. 002->third_user_phone
11. 003->third_user_fax
12. 004->third_user_address
13. .....
14. 001->last_user_name
15. 003->last_user_fax  

Я хочу извлечь четырех пользователей с предоставленным набором свойств. Начальные ключи 200/300....405 представляющие поля, которые мне не нужны, и могут пропустить, чтобы получить данные пользователя.

Данные каждого пользователя находятся в последовательных полях, но количество полей зависит от того, сколько информации известно о пользователе. Следующий метод делает то, что я ищу. Он использует перечисление возможных типов ключей и метод для поиска индекса первого поля с пользовательскими данными.

private List<User> ParseUsers( Message message )
{
    List<User> users = new List<User>( );
    User user = null; String val = String.Empty;

    for( Int32 i = message.IndexOfFirst( Keys.Name ); i < message.Count; i++ ) 
    {
        val = message[ i ].Val;

        switch( message[ i ].Key )
        {
            case Keys.Name:
                user = new User( val );
                users.Add( user ); 
                break;
            case Keys.Phone:
                user.Phone = val;
                break;
            case Keys.Fax:
                user.Fax = val;
                break;
            case Keys.Address:
                user.Address = val;
                break;
            default:
                break;
        }
    }

    return users;
}

Мне интересно, можно ли заменить метод запросом Linq. У меня проблемы с тем, чтобы сказать Linq выбрать нового пользователя и заполнить его поля всеми соответствующими данными, пока вы не найдете начало следующей записи пользователя.

Примечание: Относительные ключевые числа являются случайными (не 1,2,3,4) в реальном формате сообщения.

-121--1830833- HTML5 WebSQL: как узнать, когда завершается транзакция базы данных? У меня есть следующий код, который получает набор записей json и вставляет некоторые данные в три различные таблицы на клиентском веб- месте хранения SQL. Как можно перехватить завершение работы функции startSync ()? Что я хочу...

У меня есть следующий код, который получает набор записей json и вставляет некоторые данные в три различные таблицы клиентского хранилища Web Sql.

Каким образом можно перехватить завершение функции () Что я хочу сделать, это показать предупреждение или лучше ajax spinner gif, чтобы сообщить пользователю, когда синхронизация завершена.

Большое спасибо за вашу помощь, цяо!

function databaseSync() {

        // table one
        $.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.php?ACT=one", function(json) {
            $.each(json.results, function(i, res) {
                db.transaction(function(tx) {
                    tx.executeSql("INSERT INTO table1 (A, B, C, D) VALUES (?,?,?,?) ", [res.A, res.B, res.C, res.D], onSuccess, onError);
                });
            });
        });

        // table two
        $.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.php?ACT=two", function(json) {
            $.each(json.results, function(i, res) {
                db.transaction(function(tx) {
                    tx.executeSql("INSERT INTO table1 (A, B, C, D) VALUES (?,?,?,?) ", [res.A, res.B, res.C, res.D], onSuccess, onError);
                });
            });
        });

        // table three
        $.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.php?ACT=three", function(json) {
            $.each(json.results, function(i, res) {
                db.transaction(function(tx) {
                    tx.executeSql("INSERT INTO table1 (A, B, C, D) VALUES (?,?,?,?) ", [res.A, res.B, res.C, res.D], onSuccess, onError);
                });
            });
        });


    }
11
задан arunkumar 21 December 2012 в 05:14
поделиться