2012-04-13 3 views
2

У меня есть объект linq, и я хочу написать запрос с помощью linq.Запись SQL-запросов с использованием LINQ из объекта linq Список

, пожалуйста, помогите мне.

ВХОД:

var tags = (from row in tempChildData.AsEnumerable() 
           join tagOrder in tupleInfoDataset.Tables["TagHierarchy"].AsEnumerable() on row.Field<Int64>("TAGID") equals tagOrder.Field<Int64>("TAGID") 
           join tagName in tupleInfoDataset.Tables["SequenceChoiceList"].AsEnumerable() on tagOrder.Field<Int64>("PARENTTAGID") equals tagName.Field<Int64>("TAGID") 
           join facet in tupleInfoDataset.Tables["FacetType"].AsEnumerable() on tagName.Field<string>("Tag_Name") equals facet.Field<string>("Facetname") 
           join tagIdInfo in schDataTogetTagid.AsEnumerable() on row.Field<string>("refTagName").Contains(":") ? row.Field<string>("refTagName").Split(':').Last():row.Field<string>("refTagName") equals tagIdInfo.Field<string>("TAGNAME") 
           where (childList.Contains(row.Field<Int64>("TAGID")) && facet.Field<string>("FacetType").ToLower().Equals("ctype")) 
           select new 
           { 
            Tagid = row.Field<Int64>("TAGID"), 
            TagIdToInsert=tagIdInfo.Field<Int64>("TAGID"), 
            MaxOccur = row.Field<string>("Maxoccurs"), 
            MinOccur =Convert.ToInt32(Convert.ToString(row.Field<string>("Minoccur"))), 
            ParentTagId=tagOrder.Field<Int64>("PARENTTAGID"), 
            Order=tagOrder.Field<Int64>("TAG_ORDER"), 
            ParentTagname = tagName.Field<string>("Tag_Name"), 
            FacetId=facet.Field<Int64>("FacetID") 
           }).ToList(); 


        var parentTagID = (from tagIdInfo in tupleInfoDataset.Tables["Tuple"].AsEnumerable() 
             where tagIdInfo.Field<Int64>("TAGID").Equals(key.Key) 
             select tagIdInfo.Field<Int64>("ConceptID")).ToList(); 
        long parentID =Convert.ToInt64(parentTagID[0]); 

Теперь я хочу, чтобы запрос из приведенного выше кода, как:

INSERT INTO TUPLE_MAP (TagId,ParentTagId,ParentTagname,MinOccur,MaxOccur,Order) 
VALUES (TagIdToInsert,ParentTagId,ParentTagname,MinOccur,MaxOccur,Order) 

Пожалуйста, помогите мне, я не знаю, как писать запросы SQL с помощью Linq

+0

Добро пожаловать в StackOverflow: если вы разместите код, XML или данных образцов, пожалуйста ** ** выделить те строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора для удобного форматирования и синтаксиса выделите ее! –

+0

Здесь я хочу вставить данные в таблицу из списка тегов «теги» в заданном запросе .. Я использую sql compact 3.5 .. –

+0

Использование объекта тегов Я хочу написать компактные запросы Sql для вставки данных в базу данных: INSERT INTO TUPLE_MAP (TagId, ParentTagId, ParentTagname, MinOccur, MaxOccur, Order) VALUES (TagIdToInsert, ParentTagId, ParentTagname, MinOccur, MaxOccur, Order) , где все данные объекта «метки» используются выше –

ответ

1

Может быть что-то вроде этого:

using(var db=new DataContext("YourConnectionStringHERE")) 
{ 
    db.TUPLE_MAP.InsertAllOnSubmit(tags.Select (t => 
    new TUPLE_MAP() 
    { 
     TagId=t.TagIdToInsert, 
     ParentTagId=t.ParentTagId, 
     ParentTagname=t.ParentTagname, 
     MinOccur=t.MinOccur, 
     MaxOccur=t.MaxOccur, 
     Order=t.Order 
    })); 
    db.SubmitChanges(); 
} 

Или, если вы хотите использовать parentID то что-то вроде этого:

using(var db=new DataContext("YourConnectionStringHERE")) 
{ 
    db.TUPLE_MAP.InsertAllOnSubmit(tags.Select (t => 
    new TUPLE_MAP() 
    { 
     TagId=t.TagIdToInsert, 
     ParentTagId=parentID, 
     ParentTagname=t.ParentTagname, 
     MinOccur=t.MinOccur, 
     MaxOccur=t.MaxOccur, 
     Order=t.Order 
    })); 
    db.SubmitChanges(); 
} 

где дб ваш контекст данных LINQ

Полезное Ссылки:

EDIT

Так что, если вы используете Compact базы данных 3,5, то многие что-то вроде этого:

using (var conn =new SqlCeConnection("Data Source = test.sdf; Password ='pass'")) 
{ 
     foreach (var tag in tags) 
     { 
      using(var cmd = conn.CreateCommand()) 
      { 

       cmd.CommandText = @"INSERT INTO TUPLE_MAP (TagId,ParentTagId,ParentTagname,MinOccur,MaxOccur,Order) 
            VALUES (@TagIdToInsert,@ParentTagId,@ParentTagname,@MinOccur,@MaxOccur,@Order)"; 

       cmd.Parameters.AddWithValue("@TagIdToInsert", tag.TagIdToInsert); 
       cmd.Parameters.AddWithValue("@ParentTagId", tag.ParentTagId); 
       cmd.Parameters.AddWithValue("@ParentTagname", tag.ParentTagname); 
       cmd.Parameters.AddWithValue("@MinOccur", tag.MinOccur); 
       cmd.Parameters.AddWithValue("@MaxOccur", tag.MaxOccur); 
       cmd.Parameters.AddWithValue("@Order", tag.Order); 

       cmd.ExecuteNonQuery(); 

      } 
     } 
    } 

Полезные ссылки:

+0

Я хочу использовать запрос для вставки данных в компактную базу данных 3.5, поэтому Datacontext не может быть использован ..пожалуйста, напишите thanx заранее. –

+0

Обновлен ответ. – Arion

+0

Произошла ошибка при разборе запроса. [Номер строки токена = 1, смещение линии токена = 13, токен в ошибке = 24] im получение этой ошибки, которую я пробовал, но не удалось решить –

0

Используйте linq Pad или sql-профайлер, чтобы увидеть сгенерированный SQL. Вы также можете использовать визуальную студию для этой цели. В режиме отладки удерживайте курсор на переменной «теги», вы сможете увидеть SQL.

+0

Это не касается вопроса OP. Он не спрашивает, как получить sql уже написанного кода linq. Он спрашивает, как вставить с помощью linq – Arion

0

Я предполагаю, что вы используете Linq для SQL, если вы это делаете, у вас будет объект под названием Tuple_map в xxxDataContext. Тогда вы просто должны создать объект этого объекта что-то вроде этого ....

using (XXXDataContext context = new XXXDataContext()) 
{ 
    Tuple_map obj = new Tuple_map(); 
    //Populate obj properties like obj.tabid = from objects you got it from above query 
    context.Tuple_map.InsertOnSubmit(obj); 
    context.SubmitChanges(); 
} 
+0

Я хочу делать запросы для sql compact 3.5 .. приведенный выше код не работает .. ответить –

+0

Tuple_map не является классом, а не именем таблицы .. –

Смежные вопросы