none
Linq だけでデータの作成・更新・削除ができるのでしょうか? RRS feed

  • 質問

  • 前回の質問 の後、Linq に関して下記ドキュメントを読みました。


      - LINQ: .NET 統合言語クエリ

     

    で、どんどん調べていく前に、一つお聞きしたいことがあります。


    もしかして、Linq ってデータの抽出だけですか?
    C.R.U.D の "R" 以外もサポートしているのでしょうか?


    上記ドキュメントや他の記事を見ても、R に相当する部分ばかり説明されてい
    ます。もしかして....

    2008年6月24日 3:02

回答

すべての返信

  • >Linq ってデータの抽出だけですか?
    統合言語クエリです、クエリだけです。

     

    ただ、Linq To SQL はそれを支える技術としてADO.NET DataContext を採用しております、追加削除更新が可能です。

    http://msdn.microsoft.com/ja-jp/library/system.data.linq.datacontext.aspx

     

    Scott Guthrie さんのBlog(リンクは日本の訳)でも DataContext で更新する方法を紹介されています。
    http://www.chica2.dev-asp.net/ScottGu/result2.aspx?target=LINQ+to+SQL+(%e3%83%91%e3%83%bc%e3%83%88+4+-+%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e6%9b%b4%e6%96%b0)

    http://www.chica2.dev-asp.net/ScottGu/

     

    Linq To Object は、IEnumerable<T> ですが、List<T> を使えばそれ自体が追加削除更新が可能です。

     

    Linq は クエリだけですが背景となる技術で追加削除更新が可能だと考えてください。

    2008年6月24日 6:05
  • えムナウ さん、情報ありがとうございます。


    今後、

    1. データ入力フォームを用意し
    2. データの入力・変更を行います
    3. データの保存・更新を行い
    4. データはファイルに保存します (xml 形式を予定)
    • データはデータベースでの扱いのようにリレーションをもちます
    • SQL Server は使いたくありません

     

    このような処理を予定していますが、

    Linq To ??? の "???" に当たるものとして、何が適切なのでしょうか?

     

    そこをきっかけに今後の学習を進めてみたいと思っています。

    2008年6月24日 6:36
  • XMLを対象にしたLINQならLINQ to XMLというずばりなものがあります。

    ただ、リレーション等持つならXMLをDataSetに読み込んで、それに対してLINQで検索するのが楽なような気がします。

     

    でも、データ量が増えると性能が出なくなってきて色々小細工をすることになると思います。

    最近はインメモリのデータベースもあったりするので、それを採用するのも検討してみていいかもしれません。

    2008年6月24日 7:55
  • +かずき+ さん、情報ありがとうございます。


     +かずき+ さんからの引用

    XMLを対象にしたLINQならLINQ to XMLというずばりなものがあります。


    やっぱりそうなるのですね。


     +かずき+ さんからの引用

    リレーション等持つなら XML を DataSet に読み込んで、
    それに対して LINQ で検索するのが楽なような気がします。


    おぉ、ここが一番聞きたかったところです。
    リレーションを Linq To Xml だけで処理できるのか?と疑問だったので。


    それは下記スレッドで質問した時の状況と同じです。
    但し、そのスレッドでは Linq 導入を検討すべしという提案で終わりました。
    で、今 Linq の学習に取り掛かっているところです。


      - TableAdapter を使わずにクエリの実行は可能ですか? - MSDN フォーラム

     

     +かずき+ さんからの引用

    データ量が増えると性能が出なくなってきて色々小細工をすることになると思います。


    これは心配ないと思います。せいぜい 1000 個くらいのアイテム数ですから。

     

     +かずき+ さんからの引用

    最近はインメモリのデータベースもあったりするので、それを採用するのも検討してみていいかもしれません。


    インメモリのデータベース? DataSet のことですか?

    2008年6月24日 8:29
  • すいません。インメモリDBじゃなくて軽量DBのほうが私が言いたかったものです。

    Javaとかだと色々オープンソースであったりします。

    アプリケーションに組み込んで使えたりする大掛かりでないDBです。

     

    .NETで使うなら…SQLiteとかがお手軽みたいですね。

    私は使ったことないですが…

    でも、1000件程度ならXMLからDataSetに読み込んでLINQとかでも大丈夫だと思います。
    無理やりLINQ使わずに、Selectメソッドを使ったりする位でもいいかもしれません。

     

    2008年6月24日 9:55
  • LINQ to XMLでリレーションというか、複数のファイルを結合して扱うことは簡単にできます。
    そういった方法を利用するのでもよいかもしれません。

     

    http://itpro.nikkeibp.co.jp/article/COLUMN/20080220/294253/?ST=develop

     

    この第5回に結合の話がありますね。

    LINQ to XMLを使うなら、上記の記事が役に立つと思います。
    2008年6月24日 10:39
  •  +かずき+ さんからの引用

    インメモリ DB じゃなくて軽量 DB
    ...
    .NET で使うなら…SQLite とかがお手軽みたいですね。


    分かりました。確かにありますね。


    でも、簡単なデータベースであれば .net にはそれらすら必要ないプログラミ
    ング環境があるので、敢えてデータベースを使おうとしないようになってきま
    した、私の場合。


     +かずき+ さんからの引用

    無理やり LINQ 使わずに、Select メソッドを使ったりする位でもいいかもしれません。


    そこはそうはいかない事情がありまして、「前回の質問」のスレッドにその訳
    は書きましたが、リレーションを処理したかったのです。

    2008年6月24日 13:05
  •  どっとねっとふぁん さんからの引用

    LINQ to XMLでリレーションというか、複数のファイルを結合して扱うことは簡単にできます。

    ...

    LINQ to XMLを使うなら、上記の記事が役に立つと思います。


    本当ですね。要するに join や group を使えと。試してみます。


    今 Linq to DataSet を読み終えて、これでいけるなと感じてたところでしたが、
    どちらがしっくりくるのか両方試してみます。


    推薦の記事ですが、一昨日「第1回」を読んだものでした。でも、私の嗜好に
    合ってなかったので第2回以降読んでなくて、第5回に気づきませんでした。
    # 今回も実は読んでなくて、ポイントのみ抜き出しました。読むのがつらい。


    私にとっては、どっとねっとふぁん さんの「LINQな世界への招待」が非常に参
    考になりました。このスレッドの最初の質問をした後に読んだのですが、読ん
    で質問の回答が得られてしまったな、と感じていました。Linq は「抽出」と。


      - CLR/H コミュニティローンチ 2008 公式ウェブサイト

     

     

    どっとねっとふぁん さん、情報ありがとうございます。

    2008年6月24日 13:33