Как мы используем запрос LINQ для словаря с вложенным объектом? - PullRequest
1 голос
/ 21 июля 2011

В конечном итоге я пытаюсь выполнить массовую вставку значений из словаря в базу данных.

Вот как настроен мой словарь:

    public class Record
    {
        public int ValueNumber;
        public string ValueString;
        public byte[] ValueBinary;
        public DateTime ValueDateTime;
    }

    public Dictionary<string, Record> Elements = new Dictionary<string, Record>();

В конечном итоге, я хочусделать это:

IEnumerable<DataRow> query = Elements.AsEnumerable();           

// Create a table from the query.
DataTable dt = query.CopyToDataTable<DataRow>();

// Insert into database
SqlBulkUtilities.BulkInsertDataTable(ConnectionString, "Orders", dt);

Вот как выглядит моя SqlBulkUtilities:

public class SqlBulkUtilities
{
    public static void BulkInsertDataTable(string connectionString, string tableName, DataTable table)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlBulkCopy bulkCopy =
                new SqlBulkCopy
                (
                connection,
                SqlBulkCopyOptions.TableLock |
                SqlBulkCopyOptions.FireTriggers |
                SqlBulkCopyOptions.UseInternalTransaction,
                null
                );

            bulkCopy.DestinationTableName = tableName;
            connection.Open();

            bulkCopy.WriteToServer(table);
            connection.Close();
        }
    }
}

Как должен выглядеть каждый DataRow в DataTable:

ключ, ValueNumber, ValueString, ValueBinary, ValueDateTime

Где «ключ» - это ключ в каждой записи в Словаре.

Если бы «ключ» был правильным в объекте «Запись», то я бы невопрос, я ожидаю.Но это не так.

1 Ответ

0 голосов
/ 21 июля 2011

используйте это:

var Result = from e in Elements 
             select new 
             { 
                 Key = e.Key, 
                 ValNum = e.Value.ValueNumber... 
             };
...