2

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)

linq を使用して SQL クエリを作成する方法がわからないので、助けてください

4

3 に答える 3

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

または、parentIDthenを使用する場合は、次のようにします。

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データコンテキストです

役立つ参考資料:

編集

したがって、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();

            }
        }
    }

役立つ参考資料:

于 2012-04-13T06:42:47.467 に答える
0

linq Pad または sql プロファイラーを使用して、生成された SQL を確認します。その目的で Visual Studio を使用することもできます。デバッグモードで、変数「tags」にカーソルを合わせると、SQL が表示されます。

于 2012-04-13T06:15:33.143 に答える
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();
}
于 2012-04-13T06:39:33.583 に答える