2012-04-13 99 views
2

我有一個linq對象,我想用linq編寫查詢。使用LINQ從linq對象編寫SQL查詢列表

請幫幫我。

輸入:

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) 

請幫助我,我不知道如何使用LINQ

+0

歡迎StackOverflow上:如果您發佈的代碼,XML或數據樣本,** **請在高亮文本編輯器的線,然後點擊編輯器工具欄上的「代碼示例」按鈕(「{}」)可以很好地進行格式化和語法高亮顯示! – 2012-04-13 06:10:49

+0

這裏我想插入數據在表中從「標籤」objject列表中給出的查詢..我正在使用sql compact 3.5 .. – 2012-04-13 06:56:32

+0

使用標籤對象我想編寫Sql compact查詢以將數據插入到數據庫中; INSERT INTO TUPLE_MAP(TagId,ParentTagId,ParentTagname,MinOccur,MaxOccur,Order) VALUES(TagIdToInsert,ParentTagId,ParentTagname,MinOccur,MaxOccur,訂單) 其中所有「標籤」對象數據用於上述 – 2012-04-13 07:14:26

回答

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(); 
} 

其中db是您的LINQ數據上下文

有用引用:

編輯

因此,如果您使用的是緊湊型數據庫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

我想使用查詢在Compact數據庫3.5中插入數據,所以Datacontext不能使用..請提前回復thanx。 – 2012-04-13 06:54:25

+0

已更新答案查看 – Arion 2012-04-13 07:23:45

+0

解析查詢時出錯。 [令牌行號= 1,令牌行偏移= 13,令牌在錯誤= 24]即時通訊我得到這個錯誤,我試過,但無法解決 – 2012-04-13 07:42:31

0
寫SQL查詢

使用linq Pad或sql分析器查看生成的SQL。 您也可以爲此使用visual studio。在調試模式下,將光標放在變量「標籤」上,您將能夠看到SQL。

+0

這不解決OP的問題。他不問如何獲得已寫好的linq代碼的sql。他問如何插入使用linq – Arion 2012-04-13 06:49:38

0

我假設你正在使用Linq to SQL,如果你這樣做,你會在你的xxxDataContext中有一個名爲Tuple_map的實體。然後,你就只需要創建的該實體是這樣的對象....

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 ..上面的代碼不工作..請回復 – 2012-04-13 06:55:31

+0

Tuple_map不是一個類,而是它的表名.. – 2012-04-13 07:12:45