вставка с linq - PullRequest
       25

вставка с linq

1 голос
/ 02 декабря 2009

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

Мне нужно преобразовать все значения в их правильный тип данных, но я не могу придумать хороший способ сделать это, а затем вставить я могу перебирать столбцы в таблице LINQ

        TransactionDataContext db = new TransactionDataContext();

        var columns = db.Mapping.MappingSource
                .GetModel(typeof(TransactionDataContext))
                .GetMetaType(typeof(Transaction))
                .DataMembers;

        Type t;
        string typeName, colName;

        Transaction trans = new Transaction();

         for(int i = 0;i<columns.Count();i++)
        {
            if(columns[i].Name.In(nvcRequest.Keys)){
                colName = columnNames[i].Name;
                t =  columnNames[i].Type;
                typeName = t.Name.ToString().ToLower();

               switch(typeName){
               case "int":
            //convert value to int and add it into the new transaction
            //but i cant do t[columns[i]] = newly typed value unfortunately..  - what can i do?
            break;
            case "datetime":
            //convert to datetime and add into the appropriate field in the new transaction
            break;
            }
        }

и т.д .. ... ..

db.SubmitChanges ();

Функция In:

    public static bool In(this object o, IEnumerable c){

        foreach(object i in c){
            if(i.Equals(o))
                return true;
        }
        return false;
    }

есть идеи? Может быть, я должен просто создать строковый запрос сам? я надеюсь, что нет: (

любая помощь высоко ценится

физ

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

Взгляните на Convert.ChangeType

Edit:

Исходя из вашего комментария ниже, если у вас есть объект Transaction и Dictionary<string, object> со значениями, и вы хотите установить свойства объекта со значениями из словаря, вы можете сделать

foreach (PropertyInfo myPropertyInfo in myTransactionObject.GetType().GetProperties())
{
    myPropertyInfo.SetValue(myTransactionObject,
        Convert.ChangeType(aPropertyValue, myPropertyInfo.PropertyType), 
        null);
}
0 голосов
/ 02 декабря 2009

я бы все равно должен был сделать trans.float_column = convert.changetype (значение, typeof (float));

для каждого из 45 полей

действительно хотел бы иметь возможность циклически обходить NVC, поскольку в NVC не всегда есть данные для каждого столбца (те, которые не всегда есть, могут обнуляться в DB) чтобы избежать записи строк, чтобы проверить, есть ли значение, преобразуйте его и затем закончите с trans.colname = преобразованное значение 45 раз: (

отсюда необходимость сделать trans [string columnname] = convert.changetype (...)

Могу ли я сделать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...