2012-04-13 75 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